System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9c1f34f27de503abb3348ce0fd98f67dd50f8d4f:


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 63 6f 6e 66 69 67  te string config
e940: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
e950: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
e960: 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67  ic string Config
e970: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 0d 0a 20  InvariantName.. 
e980: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e9a0: 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
e9b0: 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 20  gInvariantName; 
e9c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
e9d0: 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67 49     set { configI
e9e0: 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 76  nvariantName = v
e9f0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
ea00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ea10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ea60: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ea70: 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64 65 72   string provider
ea80: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
eaa0: 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  ic string Provid
eab0: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 0d  erInvariantName.
eac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
eaf0: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
eb00: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
eb10: 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f         set { pro
eb20: 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
eb30: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
eb40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f  ////////////////
eb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eba0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
ebb0: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 66 61  rivate string fa
ebc0: 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a  ctoryTypeName;..
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ebe0: 69 63 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  ic string Factor
ebf0: 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20  yTypeName..     
ec00: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ec10: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ec20: 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79 54 79  return factoryTy
ec30: 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  peName; }..     
ec40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
ec50: 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   factoryTypeName
ec60: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ec70: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec80: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ecd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ece0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
ecf0: 65 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62  e providerAssemb
ed00: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
ed10: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
ed20: 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69 64 65  mblyName Provide
ed30: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
ed40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ed60: 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76 69  t { return provi
ed70: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  derAssemblyName;
ed80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ed90: 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64      set { provid
eda0: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
edb0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
edc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
edd0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
ee20: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ee30: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
ee40: 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
ee50: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
ee60: 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
ee70: 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65 72 41  lyName DesignerA
ee80: 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20  ssemblyName..   
ee90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
eeb0: 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
eec0: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d  rAssemblyName; }
eed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eee0: 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72    set { designer
eef0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76  AssemblyName = v
ef00: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
ef10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ef20: 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ef70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ef80: 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65   bool globalAsse
ef90: 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
efa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
efb0: 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  ool GlobalAssemb
efc0: 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20 20 20  lyCache..       
efd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
efe0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
eff0: 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d  turn globalAssem
f000: 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20  blyCache; }..   
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f020: 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c   { globalAssembl
f030: 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65 3b 20  yCache = value; 
f040: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f0b0: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
f0c0: 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20  packageId;..    
f0d0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47          public G
f0e0: 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a 20  uid PackageId.. 
f0f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f110: 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b 61  t { return packa
f120: 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  geId; }..       
f130: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
f140: 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75 65  ackageId = value
f150: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f160: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f170: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f1c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f1d0: 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20 20  d serviceId;..  
f1e0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
f1f0: 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64 0d   Guid ServiceId.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65 72  get { return ser
f230: 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  viceId; }..     
f240: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f250: 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61 6c   serviceId = val
f260: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f280: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f2e0: 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
f2f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f300: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 53  ublic Guid DataS
f310: 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..       
f320: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f330: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f340: 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65 49  turn dataSourceI
f350: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
f360: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
f370: 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75 65  SourceId = value
f380: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f390: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f3a0: 20 20 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 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f3f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
f400: 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
f410: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f420: 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61 50  ublic Guid DataP
f430: 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20 20  roviderId..     
f440: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f450: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f460: 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76 69  return dataProvi
f470: 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  derId; }..      
f480: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
f490: 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  dataProviderId =
f4a0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f4b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f4c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4f0: 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
f510: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f520: 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54 65  te Guid adoNetTe
f530: 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20  chnologyId;..   
f540: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f550: 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68 6e  Guid AdoNetTechn
f560: 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20 20  ologyId..       
f570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f580: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
f590: 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e  turn adoNetTechn
f5a0: 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20  ologyId; }..    
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f5c0: 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  { adoNetTechnolo
f5d0: 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  gyId = value; }.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
f600: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
f610: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
f620: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
f630: 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f680: 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
f690: 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d  iguration Class.
f6a0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
f6b0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f   sealed class Co
f6c0: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20  nfiguration..   
f6d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f6e0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
f6f0: 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20  ate Constants.. 
f700: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f710: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77  te const char Sw
f720: 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20  itch = '-';..   
f730: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f740: 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53   const char AltS
f750: 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a  witch = '/';....
f760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f7b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f7c0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
f7d0: 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77  adonly char[] Sw
f7e0: 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20  itchChars = {.. 
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
f800: 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68  witch, AltSwitch
f810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
f820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f870: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f880: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
f890: 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69 61 6e   string Invarian
f8a0: 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  tName = "System.
f8b0: 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20  Data.SQLite";.. 
f8c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f8d0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
f8e0: 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  Ef6InvariantName
f8f0: 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
f900: 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a 0d 0a  SQLite.EF6";....
f910: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
f960: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f970: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
f980: 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
f990: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
f9a0: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
f9b0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
f9c0: 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20 20  eFactory";....  
f9d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f9e0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45  e const string E
f9f0: 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  f6FactoryTypeNam
fa00: 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
fa10: 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61 74       "System.Dat
fa20: 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53 51 4c  a.SQLite.EF6.SQL
fa30: 69 74 65 50 72 6f 76 69 64 65 72 46 61 63 74 6f  iteProviderFacto
fa40: 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
fa50: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
fac0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
fad0: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
fae0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
faf0: 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
fb00: 50 72 6f 63 65 73 73 20 43 75 72 72 65 6e 74 50  Process CurrentP
fb10: 72 6f 63 65 73 73 20 3d 0d 0a 20 20 20 20 20 20  rocess =..      
fb20: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
fb30: 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f  .Diagnostics.Pro
fb40: 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
fb50: 72 6f 63 65 73 73 28 29 3b 0d 0a 0d 0a 20 20 20  rocess();....   
fb60: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fbc0: 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d  ate static Assem
fbd0: 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41 73 73  bly systemEf6Ass
fbe0: 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
fbf0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
fc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc50: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fc60: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
fc70: 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20   Data..         
fc80: 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
fc90: 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65  blyName coreAsse
fca0: 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
fcb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
fcc0: 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71  ssemblyName linq
fcd0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fcf0: 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  te AssemblyName 
fd00: 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  ef6AssemblyName;
fd10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
fd20: 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61  ivate AssemblyNa
fd30: 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d  me designerAssem
fd40: 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
fd50: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
fd60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fda0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
fdc0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
fdd0: 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  te Constructors.
fde0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
fdf0: 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69  vate Configurati
fe00: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
fe10: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
fe20: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
fe30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
fe40: 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  logFileName,..  
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
fe60: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe80: 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
fe90: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
fea0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
feb0: 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
fed0: 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c  ing ef6FileName,
fee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fef0: 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
ff00: 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  rFileName,..    
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ff20: 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73 69  ng registryVersi
ff30: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
ff40: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66       string conf
ff50: 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  igVersion,..    
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ff70: 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66  ng vsVersionSuff
ff80: 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
ff90: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 62 75       string debu
ffa0: 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  gFormat,..      
ffb0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ffc0: 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20   traceFormat,.. 
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
ffe0: 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
fff0: 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  allFlags,..     
10000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
10010 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
10020 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
10030 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10040 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
10050 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
10060 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
10070 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
10080 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
10090 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
100a0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
100b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
100c0 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65    bool noRuntime
100d0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
100e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
100f0 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20  oDesktop,..     
10100 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10110 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20  noCompact,..    
10120 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10130 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20   noNetFx20,..   
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10150 6c 20 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20  l noNetFx35,..  
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10170 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20  ol noNetFx40,.. 
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10190 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a  ool noNetFx45,..
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c  bool noNetFx451,
101c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
101d0 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c    bool noVs2005,
101e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
101f0 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
10200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10210 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
10220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10230 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c    bool noVs2012,
10240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10250 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c    bool noVs2013,
10260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10270 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d    bool noTrace,.
10280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10290 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
102a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
102b0 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
102d0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
102e0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
102f0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
10300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10310 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a     bool debug,..
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10330 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10350 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool confirm..   
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
10370 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10390 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61  his.assembly = a
103a0 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
103b0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
103c0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67  ogFileName = log
103d0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
103e0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
103f0 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  directory = dire
10400 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
10410 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72          this.cor
10420 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65  eFileName = core
10430 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
10440 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10450 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  linqFileName = l
10460 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10480 69 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  is.ef6FileName =
10490 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   ef6FileName;.. 
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
104b0 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  his.designerFile
104c0 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46  Name = designerF
104d0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
104e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72            this.r
104f0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
10500 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
10510 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10520 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65     this.configVe
10530 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65  rsion = configVe
10540 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
10550 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56          this.vsV
10560 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76  ersionSuffix = v
10570 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d  sVersionSuffix;.
10580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10590 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61   this.debugForma
105a0 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  t = debugFormat;
105b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105c0 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d    this.traceForm
105d0 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74  at = traceFormat
105e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
105f0 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46     this.installF
10600 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c  lags = installFl
10610 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
10620 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
10630 50 72 69 6f 72 69 74 79 20 3d 20 64 65 62 75 67  Priority = debug
10640 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
10650 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10660 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
10670 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10690 74 68 69 73 2e 70 65 72 55 73 65 72 20 3d 20 70  this.perUser = p
106a0 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  erUser;..       
106b0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e           this.in
106c0 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b  stall = install;
106d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106e0 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77    this.wow64 = w
106f0 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
10700 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75         this.noRu
10710 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e  ntimeVersion = n
10720 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
10730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10740 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70    this.noDesktop
10750 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20   = noDesktop;.. 
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10770 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  his.noCompact = 
10780 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20  noCompact;..    
10790 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
107a0 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e  .noNetFx20 = noN
107b0 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20  etFx20;..       
107c0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
107d0 4e 65 74 46 78 33 35 20 3d 20 6e 6f 4e 65 74 46  NetFx35 = noNetF
107e0 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x35;..          
107f0 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74        this.noNet
10800 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30  Fx40 = noNetFx40
10810 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10820 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34     this.noNetFx4
10830 35 20 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a  5 = noNetFx45;..
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 31 20  this.noNetFx451 
10860 3d 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20  = noNetFx451;.. 
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10880 68 69 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e  his.noVs2005 = n
10890 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
108a0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
108b0 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30  oVs2008 = noVs20
108c0 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08;..           
108d0 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
108e0 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  10 = noVs2010;..
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10900 74 68 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20  this.noVs2012 = 
10910 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20  noVs2012;..     
10920 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10930 6e 6f 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32  noVs2013 = noVs2
10940 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  013;..          
10950 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61        this.noTra
10960 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  ce = noTrace;.. 
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10980 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  his.noConsole = 
10990 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20  noConsole;..    
109a0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
109b0 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d  .noLog = noLog;.
109c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
109d0 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73   this.throwOnMis
109e0 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69  sing = throwOnMi
109f0 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
10a00 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61          this.wha
10a10 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20  tIf = whatIf;.. 
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10a30 68 69 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75  his.debug = debu
10a40 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
10a50 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
10a60 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10a80 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
10a90 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
10aa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10ab0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
10ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
10b20 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
10b30 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
10b40 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
10b50 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
10b60 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
10b70 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
10b80 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
10b90 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
10ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
10bb0 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
10bc0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
10bd0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
10be0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10c00 65 66 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c  ef string ef6Fil
10c10 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
10c20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10c30 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
10c40 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
10c50 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
10c60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10c70 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41         if (thisA
10c80 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
10c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10ca0 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
10cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10cc0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
10cd0 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61  h.GetDirectoryNa
10ce0 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e  me(thisAssembly.
10cf0 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  Location);....  
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10d10 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
10d20 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
10d30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10d40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
10d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10d60 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
10d70 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
10d80 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
10da0 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c  nstaller.CoreFil
10db0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
10dc0 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46             linqF
10dd0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
10de0 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
10df0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10e00 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
10e10 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  .LinqFileName);.
10e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10e30 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d     ef6FileName =
10e40 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
10e50 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
10e70 73 74 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e  staller.Ef6FileN
10e80 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
10e90 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
10ea0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
10eb0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
10ec0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
10ed0 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
10ee0 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  er.DesignerFileN
10ef0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
10f00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
10f10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f50 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10f60 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
10f70 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b  tatic bool Check
10f80 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  Option(..       
10f90 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10fa0 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20  ing arg..       
10fb0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
10fc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10fd0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10fe0 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d  g result = arg;.
10ff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11000 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
11010 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
11020 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ult))..         
11030 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11060 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
11070 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e  emove all leadin
11080 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d  g switch chars..
11090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
110a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
110c0 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69  ult = result.Tri
110d0 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68 61  mStart(SwitchCha
110e0 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rs);....        
110f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77      // NOTE: How
11120 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72 65   many chars were
11130 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20   removed?..     
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11150 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
11160 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74         int count
11170 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20   = arg.Length - 
11180 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a  result.Length;..
11190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
111c0 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65   NOTE: Was there
111d0 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a   at least one?..
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11200 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11210 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20  count > 0)..    
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
11270 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69  Ok, replace thei
11280 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20  r original..    
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67      //       arg
112b0 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  ument...        
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
112e0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20              arg 
112f0 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20  = result;....   
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74   // NOTE: Yes, t
11340 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68 2e  his is a switch.
11350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11360 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
11390 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
113a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
113b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
113e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
113f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11450 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
11460 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d  ol MatchOption(.
11470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11480 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20   string arg,..  
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
114a0 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20  ring option..   
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
114c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
114e0 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29  f ((arg == null)
114f0 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e   || (option == n
11500 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
11510 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11520 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
11530 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11540 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72  rn String.Compar
11550 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e  e(arg, 0, option
11560 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  , 0,..          
11570 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65            arg.Le
11580 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70  ngth, StringComp
11590 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67  arison.OrdinalIg
115a0 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d  noreCase) == 0;.
115b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
115c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
115d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11610 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
11620 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
11630 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65  bool? ParseBoole
11640 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  an(..           
11650 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
11660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11670 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11680 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11690 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
116a0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
116b0 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
116c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
116e0 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  l value;....    
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73  if (bool.TryPars
11710 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75  e(text, out valu
11720 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11740 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
11750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11770 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
11780 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
117a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
117d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
117e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
117f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62  rivate static ob
11800 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d  ject ParseEnum(.
11810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11820 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d   Type enumType,.
11830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11840 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20   string text,.. 
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11860 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20  ool noCase..    
11870 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
11880 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
118a0 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e   ((enumType == n
118b0 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70  ull) || !enumTyp
118c0 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20  e.IsEnum)..     
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
118e0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11900 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11910 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d  lOrEmpty(text)).
11920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11940 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11970 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11980 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e  rn Enum.Parse(en
11990 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f  umType, text, no
119a0 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
119b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
119f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a00 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
11a10 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11a50 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
11a60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ac0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11ad0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
11ae0 63 20 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45  c bool IsSystemE
11af0 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61  f6AssemblyAvaila
11b00 62 6c 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ble()..         
11b10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11b20 20 20 20 20 20 20 69 66 20 28 73 79 73 74 65 6d        if (system
11b30 45 66 36 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e  Ef6Assembly != n
11b40 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11b50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11b60 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
11b70 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ba0 20 20 20 20 20 20 73 79 73 74 65 6d 45 66 36 41        systemEf6A
11bb0 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62  ssembly = Assemb
11bc0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
11bd0 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20  yLoad(..        
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
11c00 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11c20 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  f (systemEf6Asse
11c30 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11c70 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
11c80 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
11c90 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
11cc0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
11cd0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11ce0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65     "Entity Frame
11d10 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20  work 6 assembly 
11d20 77 61 73 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  was resolved to 
11d30 7b 30 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {0}.",..        
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73      ForDisplay(s
11d60 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
11d70 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  .Location)),..  
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
11da0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
11dd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11de0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11df0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
11e10 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
11e20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11e30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
11e40 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
11e50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
11e80 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
11e90 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
11ec0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
11ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ee0 20 20 20 20 20 20 22 45 6e 74 69 74 79 20 46 72        "Entity Fr
11ef0 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65 6d 62  amework 6 assemb
11f00 6c 79 20 77 61 73 20 6e 6f 74 20 72 65 73 6f 6c  ly was not resol
11f10 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ved.",..        
11f20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11f30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11f50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
11f60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11f70 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
11f80 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
11f90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11fd0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11fe0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
11ff0 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68  blic Static Meth
12000 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
12010 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
12020 6f 69 64 20 42 72 65 61 6b 49 6e 74 6f 44 65 62  oid BreakIntoDeb
12030 75 67 67 65 72 28 29 0d 0a 20 20 20 20 20 20 20  ugger()..       
12040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12050 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
12060 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20  WriteLine(..    
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67 67  "Attach a debugg
12090 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30  er to process {0
120a0 7d 20 61 6e 64 20 70 72 65 73 73 20 61 6e 79 20  } and press any 
120b0 6b 65 79 20 74 6f 20 22 20 2b 0d 0a 20 20 20 20  key to " +..    
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 22 63 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 43 75  "continue.", (Cu
120e0 72 72 65 6e 74 50 72 6f 63 65 73 73 20 21 3d 20  rrentProcess != 
120f0 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 72               Cur
12110 72 65 6e 74 50 72 6f 63 65 73 73 2e 49 64 2e 54  rentProcess.Id.T
12120 6f 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 75 6e  oString() : "<un
12130 6b 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a 20 20 20  known>");....   
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
12150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12170 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
12180 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20  .ReadKey(true); 
12190 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121c0 63 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70  catch (InvalidOp
121d0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
121e0 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61  ) // Console.Rea
121f0 64 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  dKey..          
12200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12220 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12250 20 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b    Debugger.Break
12260 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
12270 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12280 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
122c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
122d0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
122e0 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ic Configuration
122f0 20 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29   CreateDefault()
12300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
12310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12320 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
12330 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y = null;..     
12340 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12350 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g coreFileName =
12360 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
12370 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
12380 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75  inqFileName = nu
12390 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
123a0 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46       string ef6F
123b0 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
123c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123d0 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
123e0 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
123f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12400 20 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69      GetDefaultFi
12410 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  leNames(..      
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12430 66 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66  f directory, ref
12440 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72   coreFileName, r
12450 65 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ef linqFileName,
12460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12470 20 20 20 20 20 20 72 65 66 20 65 66 36 46 69 6c        ref ef6Fil
12480 65 4e 61 6d 65 2c 20 72 65 66 20 64 65 73 69 67  eName, ref desig
12490 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  nerFileName);...
124a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
124b0 20 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66   return new Conf
124c0 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20  iguration(..    
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75  thisAssembly, nu
124f0 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63  ll, directory, c
12500 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e  oreFileName, lin
12510 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  qFileName,..    
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73  ef6FileName, des
12540 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e  ignerFileName, n
12550 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
12560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12570 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
12580 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
12590 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
125a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
125b0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
125c0 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
125d0 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
125e0 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt,..           
125f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
12600 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20  iority.Default, 
12610 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 66 61 6c  false, true, fal
12620 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12640 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
12650 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12660 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12670 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
126a0 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
126b0 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72  false, false, tr
126c0 75 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20  ue, true,..     
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
126e0 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
126f0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
12700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
12720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12750 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
12760 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
12770 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
12780 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
12790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
127a0 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
127b0 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20   FromArgs(..    
127c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
127d0 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
127e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
127f0 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
12800 20 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f            ref Co
12810 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
12820 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
12830 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
12840 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
12860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
12890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
128a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
128b0 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  args == null).. 
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
128e0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
128f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
12900 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
12910 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12930 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43  onfiguration = C
12940 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65  onfiguration.Cre
12950 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d  ateDefault();...
12960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12970 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20       int length 
12980 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a  = args.Length;..
12990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
129a0 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
129b0 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
129c0 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b  < length; index+
129d0 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
129e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20     string arg = 
12a10 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  args[index];....
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69      // NOTE: Ski
12a60 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74  p any argument t
12a70 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20  hat is null (?) 
12a80 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20  or an empty..   
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74       //       st
12ab0 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ring...         
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12ad0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
12ae0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
12af0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
12b00 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20  pty(arg))..     
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
12b70 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f   We are going to
12b80 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67   modify the orig
12b90 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20  inal argument.. 
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12bc0 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20  by removing any 
12bd0 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63  leading option c
12be0 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20  haracters;..    
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
12c10 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61  refore, we use a
12c20 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68   new string to h
12c30 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20  old the..       
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69   //       modifi
12c60 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20  ed argument...  
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20    string newArg 
12cb0 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20  = arg;....      
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12cf0 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73   NOTE: All the s
12d00 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64  upported command
12d10 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75   line options mu
12d20 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
12d30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12d40 20 20 20 20 20 62 65 67 69 6e 20 77 69 74 68 20       begin with 
12d50 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63  an option charac
12d60 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75  ter (e.g. a minu
12d70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
12d80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12d90 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73      or forward s
12da0 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74  lash); attempt t
12db0 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d  o validate that.
12dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12dd0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12de0 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61    now.  If we fa
12df0 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64  il in strict mod
12e00 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d  e, we are done;.
12e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12e30 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73    otherwise, jus
12e40 74 20 73 6b 69 70 20 74 68 69 73 20 61 72 67 75  t skip this argu
12e50 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65  ment and advance
12e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12e80 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f     to the next o
12e90 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne...           
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12ec0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43 68           if (!Ch
12ed0 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65  eckOption(ref ne
12ee0 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20  wArg))..        
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12f20 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
12f30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
12f70 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
12f80 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12fb0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
12fc0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
12ff0 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61  d command line a
13000 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a  rgument: {0}",..
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
13040 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
13050 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
130a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
130d0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
130f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
13130 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
13140 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
13150 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61       //       ha
13180 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72  ve a value; ther
13190 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74  efore, attempt t
131a0 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  o advance..     
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69     //       to i
131d0 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61  t now.  If we fa
131e0 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e  il, we are done.
131f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13200 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a        index++;..
13230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13240 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e            if (in
13250 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a  dex >= length)..
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
132a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
132b0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
132e0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
132f0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13320 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13330 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 69               "Mi
13360 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20  ssing value for 
13370 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20  option: {0}",.. 
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
133a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
133b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
133c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13410 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
13440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13450 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
134a0 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c   the textual val
134b0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  ue of this comma
134c0 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e   //       option
134f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13500 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
13530 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  xt = args[index]
13540 3b 0d 0a 0d 0a 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 2f 2f 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 2f 2f 20 4e 4f 54 45           // NOTE
13580 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69  : Figure out whi
13590 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ch command line 
135a0 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a  option this is..
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
135d0 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72   (based on a par
135e0 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29  tial name match)
135f0 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20   and then try.. 
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13620 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65  to interpret the
13630 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61   textual value a
13640 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20  s the correct.. 
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13670 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  type...         
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13690 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
136a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d             if (M
136b0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
136c0 67 2c 20 22 62 72 65 61 6b 22 29 29 0d 0a 20 20  g, "break"))..  
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
13710 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
13720 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
13750 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13790 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
137a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
137b0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
137e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
137f0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13800 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13830 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13840 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13860 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
13870 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
13880 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138b0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
138c0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
138d0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
138e0 20 20 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 20 74 72 61 63 65             trace
13900 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13930 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 72                 r
13960 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f          if ((boo
139e0 6c 29 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20  l)value)..      
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 20 20 20 20 42 72 65 61 6b 49            BreakI
13a10 6e 74 6f 44 65 62 75 67 67 65 72 28 29 3b 0d 0a  ntoDebugger();..
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
13a60 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
13a70 22 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29  "configVersion")
13a80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13a90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 63 6f 6e 66 69 67            config
13ac0 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65  uration.configVe
13ad0 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20  rsion = text;.. 
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13b20 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13b30 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20  confirm"))..    
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13b80 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13b90 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13bc0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13c10 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13c20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13c50 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13c60 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13ca0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13cb0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cd0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13ce0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13cf0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13d30 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13d40 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13d70 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13da0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13dd0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13e00 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13e50 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62  ion.confirm = (b
13e60 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13ea0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13eb0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72  ion(newArg, "cor
13ec0 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  eFileName"))..  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
13f10 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  on.coreFileName 
13f20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13f50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
13f60 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13f70 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 22  (newArg, "debug"
13f80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13f90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13fc0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13fd0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 69 66 20 28              if (
14000 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 7b 0d 0a 20              {.. 
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14050 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
14060 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
140a0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
140b0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
140e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
140f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
14130 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
14140 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14170 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
14180 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
141c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
141f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
14220 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14290 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
142a0 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
142b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
142f0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14300 2c 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29  , "debugFormat")
14310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14320 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 63 6f 6e 66 69 67            config
14350 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72  uration.debugFor
14360 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
14390 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  s.DebugFormat = 
143a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
143b0 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
143f0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
14400 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62  ion(newArg, "deb
14410 75 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  ugPriority")).. 
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
14460 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
14470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
144a0 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
144b0 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
144e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
14530 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14540 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14570 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14580 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
145c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
145d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14600 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
14610 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14640 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
14650 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14680 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
146c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
146f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14730 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14760 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
14770 67 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  gPriority = (Tra
14780 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
14790 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
147a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
147b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69  raceOps.DebugPri
147c0 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
147d0 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72  ation.debugPrior
147e0 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14810 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
14820 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
14830 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46  wArg, "designerF
14840 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14890 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
148a0 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
148e0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
148f0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65  on(newArg, "dire
14900 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20  ctory"))..      
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
14950 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b  irectory = text;
14960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41  // NOTE: *SPECIA
149b0 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20  L* Must refresh 
149c0 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a  the file names..
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
149f0 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75 73       here becaus
14a00 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  e the underlying
14a10 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   directory..    
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14a40 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20   has changed... 
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
14a90 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g coreFileName =
14aa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
14ab0 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14ae0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
14af0 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
14b00 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
14b30 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
14b40 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61  eName(coreFileNa
14b50 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
14b80 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72  sNullOrEmpty(cor
14b90 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  eFileName))..   
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
14bc0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74  eFileName = Inst
14bd0 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61  aller.CoreFileNa
14be0 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14c10 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
14c20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14c50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
14c60 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65  ectory, coreFile
14c70 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e        string lin
14ca0 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  qFileName = conf
14cb0 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
14cc0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
14cf0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
14d00 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
14d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
14d40 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
14d50 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  (linqFileName);.
14d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14d80 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
14d90 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65  OrEmpty(linqFile
14da0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65          linqFile
14dd0 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
14de0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .LinqFileName;..
14df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14e10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
14e20 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
14e30 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14e60 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
14e70 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  y, linqFileName)
14e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
14eb0 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ame = configurat
14ec0 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 3b  ion.ef6FileName;
14ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
14f00 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69 6c  llOrEmpty(ef6Fil
14f10 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f30 20 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65           ef6File
14f40 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
14f50 69 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c 65 4e  ileName(ef6FileN
14f60 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
14f90 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66  IsNullOrEmpty(ef
14fa0 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  6FileName))..   
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36               ef6
14fd0 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
14fe0 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65  ller.Ef6FileName
14ff0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65   configuration.e
15020 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  f6FileName = Pat
15030 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15060 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74  iguration.direct
15070 6f 72 79 2c 20 65 66 36 46 69 6c 65 4e 61 6d 65  ory, ef6FileName
15080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
150b0 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  rFileName = conf
150c0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
150d0 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
15100 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
15110 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
15120 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
15150 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
15160 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73  .GetFileName(des
15170 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
15180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
151a0 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
151b0 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72  OrEmpty(designer
151c0 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69              desi
151f0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49  gnerFileName = I
15200 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65  nstaller.Designe
15210 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFileName;....  
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15240 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72  uration.designer
15250 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
15260 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15290 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
152a0 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  y, designerFileN
152b0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
152d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152e0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
152f0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15300 65 77 41 72 67 2c 20 22 65 66 36 46 69 6c 65 4e  ewArg, "ef6FileN
15310 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 7b 0d 0a 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 63                 c
15350 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36  onfiguration.ef6
15360 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
15370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
153b0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
153c0 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20  , "install")).. 
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
15410 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
15420 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
15450 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
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 7b 0d 0a 20 20 20 20 20 20         {..      
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
154a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
154b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
154e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
154f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
15500 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15530 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
15540 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
15570 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
15580 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
155c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
155d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15600 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15630 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 63 6f 6e 66 69 67 75           configu
156e0 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d  ration.install =
156f0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15740 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
15750 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d  installFlags")).
15760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15770 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
157a0 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
157b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
157c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157d0 20 20 20 74 79 70 65 6f 66 28 49 6e 73 74 61 6c     typeof(Instal
157e0 6c 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20 74  lFlags), text, t
157f0 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rue);....       
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15820 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15860 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15870 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15880 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
158b0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
158c0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
158d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
15900 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15910 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15930 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15940 69 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73  id install flags
15950 20 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20   value: {0}",.. 
15960 20 20 20 20 20 20 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 20 20                  
15980 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65     ForDisplay(te
15990 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  xt)), traceCateg
159a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
159d0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15a00 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
15a30 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15a80 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20  .installFlags = 
15a90 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76 61  (InstallFlags)va
15aa0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
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 65 6c 73 65 20 69 66           else if
15ae0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
15af0 77 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e  wArg, "linqFileN
15b00 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15b40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
15b50 71 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  qFileName = text
15b60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15b70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
15ba0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15bb0 67 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22  g, "logFileName"
15bc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 63 6f 6e 66 69             confi
15c00 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
15c10 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15c60 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
15c70 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20 20  oCompact"))..   
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
15cc0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
15cd0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
15d00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
15d50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
15d60 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
15d90 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15da0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
15de0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15df0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15e20 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15e30 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
15e70 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
15e80 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15eb0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15ee0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15f10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15f40 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 63 6f 6e 66 69 67 75 72 61         configura
15f90 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d  tion.noCompact =
15fa0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
15ff0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16000 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20  noConsole"))..  
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16040 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16050 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16060 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16090 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
160e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
160f0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16120 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16130 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16140 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16170 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16180 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
161b0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
161c0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16200 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16210 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16240 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16270 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 20 20 20 20 20 20 20 72                 r
162a0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
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 63 6f 6e 66 69 67 75 72          configur
16320 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20  ation.noConsole 
16330 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16370 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16380 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16390 22 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20  "noDesktop")).. 
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
163e0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
163f0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
16420 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
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 7b 0d 0a 20 20 20 20 20 20         {..      
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16470 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16480 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
164b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
164c0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
164d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16500 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
16510 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
16540 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
16550 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
16590 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
165a0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
165d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
165e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16600 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
16640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16680 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
166b0 72 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70  ration.noDesktop
166c0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
166d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
166e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
16710 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
16720 20 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20   "noLog"))..    
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
16770 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
16780 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
167b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
16800 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16810 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
16840 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16850 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
16860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16890 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
168a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
168d0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
168e0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16920 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16960 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16990 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
169c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
169f0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16a40 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f  ion.noLog = (boo
16a50 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16a90 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16aa0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
16ab0 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20 20  Fx20"))..       
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
16b00 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
16b10 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
16b40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
16b90 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
16ba0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
16bd0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
16be0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
16c20 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
16c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
16c60 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
16c70 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16ca0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
16cb0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
16cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16cf0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
16d20 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16d50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
16d80 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
16dd0 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62 6f  .noNetFx20 = (bo
16de0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
16e20 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
16e30 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
16e40 74 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20 20  tFx35"))..      
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
16e90 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16ea0 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16ed0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16f20 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16f30 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
16f60 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
16f70 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16fb0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16fc0 28 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 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16ff0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
17000 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17030 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17040 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17080 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
170b0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
170e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17100 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17110 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17160 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28 62  n.noNetFx35 = (b
17170 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
171b0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
171c0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
171d0 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20 20  etFx40"))..     
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
17220 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17230 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17260 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
172b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
172c0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
172f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17300 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17340 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17350 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17380 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17390 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
173c0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
173d0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
173e0 29 2c 0d 0a 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 20 20 20 20                  
17400 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
17410 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17440 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17470 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
174a0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
174f0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28  on.noNetFx40 = (
17500 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
17550 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
17560 4e 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20 20  NetFx45"))..    
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
175b0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
175c0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
175f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
17640 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
17650 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
17680 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
17690 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
176a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
176d0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
176e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
17710 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
17720 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17760 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17770 29 29 2c 0d 0a 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 20 20                  
17790 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
177a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
177d0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17800 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17830 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17880 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20  ion.noNetFx45 = 
17890 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
178e0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
178f0 6f 4e 65 74 46 78 34 35 31 22 29 29 0d 0a 20 20  oNetFx451"))..  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
17940 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
17950 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17980 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
179d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
179e0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17a10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17a20 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17a30 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17a60 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17a70 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
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 20 20 20 20 22 49 6e 76 61             "Inva
17aa0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
17ab0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
17ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
17af0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
17b00 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 20 20 20 74 72 61 63 65             trace
17b30 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17b60 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 72                 r
17b90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
17c10 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31  ation.noNetFx451
17c20 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
17c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17c40 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
17c70 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
17c80 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69   "noRuntimeVersi
17c90 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on"))..         
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
17cd0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
17ce0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
17cf0 0a 0d 0a 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 69                 i
17d10 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
17d20 29 0d 0a 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 7b                 {
17d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
17d70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
17d80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
17db0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
17dc0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
17e00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
17e40 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
17e50 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
17e80 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
17e90 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
17ea0 20 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 20 20 20                  
17ec0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
17ed0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
17f00 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
17f30 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17f60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
17fb0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  oRuntimeVersion 
17fc0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
17fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
18010 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
18020 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20  "noTrace"))..   
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18040 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
18070 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
18080 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
180b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
18100 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
18110 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18140 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18150 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
18190 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
181a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
181b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181c0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
181d0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
181e0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
18220 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
18230 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18260 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18290 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
182c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
182f0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 63 6f 6e 66 69 67 75 72 61         configura
18340 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28  tion.noTrace = (
18350 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
183a0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
183b0 56 73 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20  Vs2005"))..     
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18400 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18410 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
18440 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18490 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
184a0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
184d0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
184e0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
184f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
18520 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
18530 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
18560 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
18570 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
185a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
185b0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
185c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
185f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
18620 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18650 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18680 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
186d0 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62  on.noVs2005 = (b
186e0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18720 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18730 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
18740 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20  s2008"))..      
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18780 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
18790 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
187a0 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
187d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18820 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18830 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18850 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
18860 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18870 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
188b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
188c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
188f0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18900 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18930 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18940 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
18950 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18970 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18980 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
189b0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
189e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18a10 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18a60 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f  n.noVs2008 = (bo
18a70 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
18ab0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18ac0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
18ad0 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20  2010"))..       
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
18b20 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
18b30 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
18b60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18bb0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
18bc0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
18bf0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
18c00 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
18c40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
18c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
18c80 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
18c90 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
18cc0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
18cd0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
18ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
18d10 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d30 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
18d40 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18d70 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
18da0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
18df0 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f  .noVs2010 = (boo
18e00 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
18e40 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
18e50 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
18e60 30 31 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20  012"))..        
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
18ea0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
18eb0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
18ec0 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
18ef0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
18f40 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
18f50 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
18f80 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
18f90 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
18fd0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
18fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
19010 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
19020 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
19050 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
19060 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
19070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
190a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
190d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19100 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
19110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19120 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
19130 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
19180 6e 6f 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c  noVs2012 = (bool
19190 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
191c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
191d0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
191e0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
191f0 31 33 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  13"))..         
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19230 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
19240 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
19250 0a 0d 0a 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 69                 i
19270 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
19280 29 0d 0a 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 7b                 {
192a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
192d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
192e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
19310 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
19320 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19360 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19390 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
193a0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
193b0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
193e0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
193f0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
19430 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
19460 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
19490 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
194c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
194d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
19510 6f 56 73 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29  oVs2013 = (bool)
19520 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19550 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
19560 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
19570 6e 65 77 41 72 67 2c 20 22 70 65 72 55 73 65 72  newArg, "perUser
19580 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
195c0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
195d0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
195e0 0a 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 69 66 20               if 
19600 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
19610 0a 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 7b 0d 0a               {..
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
19660 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
19670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
196a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
196b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
196e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
196f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
19730 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
19740 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
19750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19760 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19770 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
19780 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
19790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
197c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
197f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19820 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19890 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 65 72  onfiguration.per
198a0 55 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  User = (bool)val
198b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
198f0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
19900 41 72 67 2c 20 22 72 65 67 69 73 74 72 79 56 65  Arg, "registryVe
19910 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20  rsion"))..      
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72   configuration.r
19960 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
19970 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
199a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
199b0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
199c0 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63 74 22  newArg, "strict"
199d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
199e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
19a10 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
19a20 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
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 69 66 20 28              if (
19a50 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 7b 0d 0a 20              {.. 
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19aa0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
19ab0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
19ac0 20 20 20 20 20 20 20 20 20 20 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 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
19af0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
19b00 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19b30 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
19b40 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
19b80 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
19b90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
19bc0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
19bd0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
19c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19c70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19d00 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65   NOTE: Allow the
19d10 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72   command line ar
19d20 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20  guments to..    
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d40 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19d50 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 22 73   override the "s
19d60 74 72 69 63 74 6e 65 73 73 22 20 73 65 74 74 69  trictness" setti
19d70 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69 64 65  //       provide
19da0 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
19db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19dd0 0d 0a 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 73 74                st
19df0 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  rict = (bool)val
19e00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
19e40 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
19e50 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73  Arg, "throwOnMis
19e60 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20 20 20  sing"))..       
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ea0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
19eb0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
19ec0 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
19ef0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
19f40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19f50 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f70 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
19f80 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
19f90 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
19fa0 20 20 20 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 20 20 20 20 20                  
19fc0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
19fd0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
1a010 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
1a020 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1a050 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1a060 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1a070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a090 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a0a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
1a0d0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a100 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
1a130 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1a180 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20  .throwOnMissing 
1a190 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a1e0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a1f0 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d  "traceFormat")).
1a200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a210 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1a240 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
1a250 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  t = text;..     
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1a280 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f  TraceFormat = co
1a290 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1a2a0 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a2e0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1a2f0 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65  n(newArg, "trace
1a300 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20  Priority"))..   
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a340 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
1a350 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a380 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72  ypeof(TracePrior
1a390 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ity), text, true
1a3a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3c0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1a3d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1a420 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1a430 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1a460 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1a470 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a4b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1a4c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1a4f0 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  {0} value: {1}",
1a500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1a530 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1a540 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a570 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
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 20 20 7d 0d 0a 0d 0a             }....
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a640 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1a650 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50  iguration.traceP
1a660 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65  riority = (Trace
1a670 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d  Priority)value;.
1a680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a6a0 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72  ceOps.TracePrior
1a6b0 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ity = configurat
1a6c0 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
1a6d0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1a710 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1a720 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d  rg, "verbose")).
1a730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a740 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
1a770 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
1a780 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
1a7b0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
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 7b 0d 0a 20 20 20 20           {..    
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1a800 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
1a810 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1a850 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1a860 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a890 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1a8a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
1a8d0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
1a8e0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
1a8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a910 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1a920 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
1a930 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a960 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1a970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1a9d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1aa40 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65  guration.verbose
1aa50 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
1aa60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aa70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1aaa0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1aab0 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69   "vsVersionSuffi
1aac0 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x"))..          
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
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 63 6f 6e               con
1ab00 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56 65 72  figuration.vsVer
1ab10 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74 65 78  sionSuffix = tex
1ab20 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1ab60 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1ab70 72 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d 0a  rg, "whatIf"))..
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
1abc0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
1abd0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
1ac00 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
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 7b 0d 0a 20 20 20 20 20          {..     
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1ac50 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
1ac60 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1aca0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
1acb0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ace0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1acf0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1ad20 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
1ad30 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
1ad70 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
1ad80 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1adb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ade0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1ae20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
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 63 6f 6e 66 69 67            config
1ae90 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d  uration.whatIf =
1aea0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1aef0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1af00 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20 20 20  wow64"))..      
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
1af50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
1af60 29 3b 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
1af90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
1afe0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1aff0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1b020 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
1b030 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1b070 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1b080 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
1b0b0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
1b0c0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1b0f0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1b100 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1b110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1b140 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1b170 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
1b1a0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1b1d0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1b220 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29  n.wow64 = (bool)
1b230 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1b260 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b2b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1b2c0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1b2f0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1b300 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b330 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1b340 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
1b370 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61  nsupported comma
1b380 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20  nd line option: 
1b390 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1b3c0 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61  y(arg)), traceCa
1b3d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3f0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1b400 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1b430 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b480 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1b490 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1b4b0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1b4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b4e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1b4f0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1b500 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
1b510 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1b540 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c  raceCallback, e,
1b550 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1b560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b570 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b580 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66  "Failed to modif
1b590 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y configuration.
1b5a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b5b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b5c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b5d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b5e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b5f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b640 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
1b650 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
1b660 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
1b670 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
1b680 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
1b690 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20  ol Process(..   
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1b6b0 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ing[] args,..   
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
1b6d0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
1b6e0 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
1b6f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1b700 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
1b710 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1b720 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1b730 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1b740 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1b760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b780 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
1b790 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1b7a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b7b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76      error = "Inv
1b7e0 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69  alid configurati
1b7f0 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b840 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1b850 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63  bly assembly = c
1b860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73  onfiguration.ass
1b870 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  embly;....      
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b890 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75   (assembly == nu
1b8a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b8b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76      error = "Inv
1b8e0 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b  alid assembly.";
1b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b900 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b910 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1b930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b940 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1b950 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65  guration.noTrace
1b960 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b970 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b990 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1b9a0 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20  tion.noLog &&.. 
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9c0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
1b9d0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1b9e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
1b9f0 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  gFileName))..   
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65      // NOTE: Use
1ba60 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 6f 67   the default log
1ba70 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...   
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 20 20 2f 2f 0d 0a 20 20 20           //..   
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1bac0 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
1bad0 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e  me = GetLogFileN
1bae0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 22 74 72 61 63 65 22 29 3b 0d        "trace");.
1bb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1bb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb90 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
1bba0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
1bbb0 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  nsole)..        
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bbf0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bc10 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f  / NOTE: In verbo
1bc20 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f  se mode, debug o
1bc30 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74  utput (that meet
1bc40 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bc60 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e 66  /       the conf
1bc70 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 20  igured priority 
1bc80 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62  criteria) will b
1bc90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bcb0 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61 79 65  /       displaye
1bcc0 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65  d to the console
1bcd0 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72 61  ; otherwise, tra
1bce0 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74 20  //       output 
1bd10 28 74 68 61 74 20 6d 65 65 74 73 20 74 68 65 20  (that meets the 
1bd20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72  configured prior
1bd30 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd50 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65 72   //       criter
1bd60 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73 70  ia) will be disp
1bd70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e  layed to the con
1bd80 73 6f 6c 65 2e 0d 0a 20 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 2f 2f 0d 0a 20 20 20 20 20 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 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
1bdd0 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20  tion.debug)..   
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65  // NOTE: Add the
1be50 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c   console trace l
1be60 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a  istener to the..
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66  //       list of
1bea0 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73   trace listeners
1beb0 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a   maintained by..
1bec0 20 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 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54 72 61  //       the Tra
1bef0 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69 2e 65  ceOps class (i.e
1bf00 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d  . only messages.
1bf10 0a 20 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 2f 2f 20 20 20 20 20 20 20 74 68 61 74 20 6d   //       that m
1bf40 65 65 74 20 74 68 65 20 64 65 62 75 67 20 70 72  eet the debug pr
1bf50 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a  iority will be..
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 20 20                  
1bf80 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20 6f 6e  //       seen on
1bf90 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a   the console)...
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfe0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 65 74      TraceOps.Set
1bff0 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73  upDebugListeners
1c000 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c060 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1c0b0 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c  : Add the consol
1c0c0 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72  e trace listener
1c0d0 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c100 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c 74 2d    list of built-
1c110 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  in trace listene
1c120 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20  rs (i.e...      
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1c150 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73     only messages
1c160 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 74   that meet the t
1c170 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
1c1a0 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65 20  riority will be 
1c1b0 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73  seen on the cons
1c1c0 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ole)...         
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c210 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e  .Listeners.Add(n
1c220 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c  ew ConsoleTraceL
1c230 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20  istener());..   
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c290 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1c2f0 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
1c300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 21 53 74               !St
1c320 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1c330 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ty(configuration
1c340 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  .logFileName))..
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73         Trace.Lis
1c390 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 54  teners.Add(new T
1c3a0 65 78 74 57 72 69 74 65 72 54 72 61 63 65 4c 69  extWriterTraceLi
1c3b0 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20 20  stener(..       
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1c3e0 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
1c3f0 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  me));....       
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65       // NOTE: Te
1c440 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20 63 72  chnically, we cr
1c450 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20 66 69  eated the log fi
1c460 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...           
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b   filesCreated++;
1c4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c4f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20    // NOTE: Dump 
1c520 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
1c530 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65  n now in case we
1c540 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   need to..      
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c560 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68         troublesh
1c570 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d  oot any issues..
1c580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c590 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c5b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64  (configuration.d
1c5c0 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c 3d 20  ebugPriority <= 
1c5d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1c5e0 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  dium)..         
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c600 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d  onfiguration.Dum
1c610 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 29  p(debugCallback)
1c620 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c630 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
1c640 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65  figuration.trace
1c650 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63  Priority <= Trac
1c660 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c670 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c680 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c690 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72  guration.Dump(tr
1c6a0 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d  aceCallback);...
1c6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c6c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c6e0 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65  NOTE: Show where
1c6f0 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20   we are running 
1c700 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20  from and how we 
1c710 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  were..          
1c720 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1c730 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20     invoked...   
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c750 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c760 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1c770 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d  location = assem
1c780 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d  bly.Location;...
1c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c7a0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c7b0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c7c0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c7d0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1c7f0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1c800 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1c810 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78 65      "Running exe
1c840 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22  cutable is: {0}"
1c850 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63  , ForDisplay(loc
1c860 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  ation)),..      
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c8a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1c8b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1c8c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1c8d0 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1c900 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1c910 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61          "Origina
1c940 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69  l command line i
1c950 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f    Environment.Co
1c980 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63  mmandLine), trac
1c990 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1c9c0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1c9d0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
1c9e0 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1ca00 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1ca10 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1ca20 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65    "Running proce
1ca50 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36  ss is {0}.", Is6
1ca60 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d  4BitProcess() ?.
1ca70 0a 20 20 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 22 36 34               "64
1ca90 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69 74 22  -bit" : "32-bit"
1caa0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1cab0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cac0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1cad0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
1cae0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
1caf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
1cb40 20 64 65 62 75 67 67 65 72 20 69 73 20 61 74 74   debugger is att
1cb50 61 63 68 65 64 20 61 6e 64 20 22 77 68 61 74 2d  ached and "what-
1cb60 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  if"..           
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1cb80 20 20 20 20 20 20 6d 6f 64 65 20 69 73 20 5b 6e        mode is [n
1cb90 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73  ow] disabled, is
1cba0 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a  sue a warning...
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72      if (Debugger
1cbf0 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20  .IsAttached)..  
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1cc20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1cc30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1cc40 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1cc70 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1cc80 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1cc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cca0 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63             "Forc
1ccb0 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c 22  ed to disable \"
1ccc0 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 77  what-if\" mode w
1ccd0 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ith " +..       
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67 67           "debugg
1cd00 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20 74  er attached.", t
1cd10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1cd40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1cd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1cd90 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1cda0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cdd0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cde0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74           "No act
1ce10 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c  ual changes will
1ce20 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73   be made to this
1ce30 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce50 20 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73    "system becaus
1ce60 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
1ce70 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c  de is enabled.",
1ce80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1cea0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
1ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
1cf00 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1cf10 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61   has not been ma
1cf20 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  nually..        
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1cf40 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28       confirmed (
1cf50 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70  i.e. via the exp
1cf60 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69  licit command li
1cf70 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
1cf80 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1cf90 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73   option), then s
1cfa0 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e  top processing n
1cfb0 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d  ow.  We enforce.
1cfc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cfd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
1cfe0 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20  is rule so that 
1cff0 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c  simply double-cl
1d000 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  icking the..    
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61  //       executa
1d030 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73  ble will not res
1d040 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67  ult in any chang
1d050 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20  es being..      
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d070 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74         made to t
1d080 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  he system...    
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d0b0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1d0c0 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69  figuration.confi
1d0d0 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm)..           
1d0e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e      error = "Can
1d110 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68  not continue, th
1d120 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70  e \"confirm\" op
1d130 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20  tion is " +..   
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e           "not en
1d160 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20  abled.";....    
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d180 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1d190 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d1a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1c0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1f0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
1d200 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
1d210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1d230 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1d240 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1d250 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1d280 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1d290 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
1d2a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1d2c0 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70  r = "Failed to p
1d2d0 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61  rocess configura
1d2e0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1d2f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d310 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d320 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d330 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d380 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
1d390 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
1d3a0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
1d3b0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
1d3c0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1d3d0 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e  ic bool CheckRun
1d3e0 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f                Co
1d400 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1d410 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1d420 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1d430 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20   strict,..      
1d440 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1d450 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1d460 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1d470 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d490 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1d4a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d4b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1d4c0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1d4d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d4e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d500 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e       error = "In
1d510 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74  valid configurat
1d520 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d590 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61      // NOTE: Wha
1d5a0 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  t version of the
1d5b0 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65   runtime was the
1d5c0 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d   core (primary).
1d5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d5e0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1d5f0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1d600 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76  against (e.g. "v
1d610 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20  2.0.50727" or.. 
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e     //       "v4.
1d640 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20  0.30319")...    
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d670 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1d680 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1d690 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67  ersion = GetImag
1d6a0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
1d6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1d6d0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
1d6e0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d710 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1d720 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75  e allow the actu
1d730 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  al image runtime
1d740 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d   checking to be.
1d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d760 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79       //       by
1d770 70 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22  passed via the "
1d780 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  -noRuntimeVersio
1d790 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  n" command line.
1d7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7b0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
1d7c0 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61  tion.  The comma
1d7d0 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69  nd line option i
1d7e0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a  s intended for..
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70      //       exp
1d810 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20  ert use only... 
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d840 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1d850 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52  onfiguration.noR
1d860 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a  untimeVersion)..
1d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d880 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d8a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1d8b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1d8c0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1d8f0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1d900 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1d910 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
1d940 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1d950 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1d960 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}; " +..      
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20        "however, 
1d990 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73  installation res
1d9a0 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20  trictions based 
1d9b0 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  on this " +..   
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68           "fact h
1d9e0 61 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65  ave been disable
1d9f0 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  d via the comman
1da00 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20  d line.",..     
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1da30 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
1da40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1da50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1da60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1da70 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1da90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1daa0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dac0 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74  / TODO: Restrict
1dad0 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
1dae0 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63  on based on whic
1daf0 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20  h image..       
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1db10 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65        runtime ve
1db20 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f  rsions (which mo
1db30 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65  re-or-less corre
1db40 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  spond..         
1db50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db60 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d      to .NET Fram
1db70 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20  ework versions) 
1db80 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79  are supported by
1db90 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1dba0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1dbb0 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56     versions of V
1dbc0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61  isual Studio tha
1dbd0 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e  t are installed.
1dbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dbf0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1dc10 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1dc20 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65  rEmpty(coreImage
1dc30 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc70 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
1dc80 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1dc90 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1dca0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1dcc0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dce0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1dcf0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1dd00 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a  String.Equals(..
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
1dd30 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1dd40 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52  ion, CLRv2ImageR
1dd50 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a  untimeVersion,..
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
1dd80 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
1dd90 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dde0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
1ddf0 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e  the CLR v2.0 run
1de00 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
1de10 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
1de40 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
1de50 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
1de60 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
1de90 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1dea0 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34  d for the CLR v4
1deb0 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  .0.  It is..    
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ded0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63      //       unc
1dee0 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69  ertain if this i
1def0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f  s actually a pro
1df00 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20  blem in..       
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69   //       practi
1df30 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34  ce as the CLR v4
1df40 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20  .0 can load and 
1df50 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  use an..        
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1df80 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  y compiled with 
1df90 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f  the CLR v2.0; ho
1dfa0 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74  //       since t
1dfd0 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65  his project offe
1dfe0 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72  rs both configur
1dff0 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  ations,..       
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72   //       we cur
1e020 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20  rently disallow 
1e030 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a  this mismatch...
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1e080 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72  n.noNetFx40 = tr
1e090 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1e0b0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1e0c0 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx45 = true;..  
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1e0f0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d  ion.noNetFx451 =
1e100 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1e130 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a  Vs2010 = true;..
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e150 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1e160 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d  ation.noVs2012 =
1e170 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1e1a0 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b 0d 0a  Vs2013 = true;..
1e1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e1c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1e1d0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1e1e0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1e1f0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1e220 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1e230 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1e240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1e260 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1e270 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1e280 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
1e290 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68   "support for th
1e2c0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1e2d0 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61   {1} is now disa
1e2e0 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65 52       CLRv2ImageR
1e310 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43  untimeVersion, C
1e320 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1e330 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1e360 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1e370 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69     else if (Stri
1e3a0 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20  ng.Equals(..    
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67          coreImag
1e3d0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1e3e0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1e3f0 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  meVersion,..    
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 20 53 74 72 69 6e 67 43 6f          StringCo
1e420 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
1e430 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1e440 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e480 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20  / NOTE: For the 
1e490 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65  CLR v4.0 runtime
1e4a0 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64  , make sure we d
1e4b0 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  isable..        
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74  //       any att
1e4e0 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66  empt to use it f
1e4f0 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72  or things that r
1e500 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20  equire..        
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65  //       an asse
1e530 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f  mbly compiled fo
1e540 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d  r the CLR v2.0..
1e550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e560 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1e590 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74  on.noNetFx20 = t
1e5a0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1e5c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1e5d0 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d 0a 20  tFx35 = true;.. 
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1e600 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20  tion.noVs2005 = 
1e610 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1e630 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1e640 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2008 = true;...
1e650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e660 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1e670 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1e680 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
1e690 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1e6c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1e6d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
1e700 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
1e710 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
1e720 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
1e730 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65  "support for the
1e760 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
1e770 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62  {1} is now disab
1e780 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  led.",..        
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
1e7b0 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv4ImageRuntime
1e7c0 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7e0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1e7f0 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74  y(CLRv2ImageRunt
1e800 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  imeVersion)),.. 
1e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e820 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e830 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
1e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e850 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1e860 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e890 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1e8a0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
1e8b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8d0 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 72  "unsupported cor
1e8e0 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
1e8f0 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22 20 2b  time version " +
1e900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
1e920 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31 7d 20  0}, must be {1} 
1e930 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20  or {2}",..      
1e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e950 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1e960 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d  (coreImageRuntim
1e970 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1e9a0 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75 6e  ay(CLRv2ImageRun
1e9b0 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  timeVersion),.. 
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1e9e0 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
1e9f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1ea00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ea20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ea50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ea60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1ea70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ea80 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
1ea90 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1eab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eac0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1ead0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1eae0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
1eaf0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1eb10 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1eb20 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
1eb30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1eb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb50 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
1eb60 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d  iled to check im
1eb70 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
1eb80 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
1eb90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ebb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1ebc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ebd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1ebe0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
1ebf0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ec00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ec40 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
1ec50 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
1ec60 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1ec70 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20  ool HasFlags(.. 
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1ec90 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46  nstallFlags hasF
1eca0 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
1ecb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d         bool all.
1ecc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ecd0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1ece0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ecf0 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20     if (all)..   
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c   return ((instal
1ed20 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  lFlags & hasFlag
1ed30 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b  s) == hasFlags);
1ed40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ed50 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ed70 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
1ed80 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d  s & hasFlags) !=
1ed90 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f   InstallFlags.No
1eda0 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne);..          
1edb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1edc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1edd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ede0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ee10 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1ee20 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65  l IsLinqSupporte
1ee30 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
1ee40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ee50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ee60 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1ee70 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1ee80 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44   if the System.D
1ee90 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d  ata.SQLite.Linq.
1eea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eeb0 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
1eec0 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f  ly should be pro
1eed0 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
1eee0 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20  e install...    
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1ef00 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67       If the targ
1ef10 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75  et is Visual Stu
1ef20 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20 6d  dio 2005, this m
1ef30 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
1ef40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
1ef50 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78 33  return !noNetFx3
1ef90 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30 20  5 || !noNetFx40 
1efa0 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c 7c  || !noNetFx45 ||
1efb0 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20   !noNetFx451;.. 
1efc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f030 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66 36  ublic bool IsEf6
1f040 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20 20  Supported()..   
1f050 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1f070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f080 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
1f090 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
1f0a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1f0b0 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20 20 20  te.EF6..        
1f0c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1f0d0 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64   assembly should
1f0e0 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 64 75   be processed du
1f0f0 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c 6c  ring the install
1f100 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f110 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66 20 74     //       If t
1f120 68 65 20 74 61 72 67 65 74 20 69 73 20 56 69 73  he target is Vis
1f130 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35 20  ual Studio 2005 
1f140 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20  or Visual..     
1f150 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f160 20 20 20 20 53 74 75 64 69 6f 20 32 30 30 38 2c      Studio 2008,
1f170 20 74 68 69 73 20 6d 75 73 74 20 72 65 74 75 72   this must retur
1f180 6e 20 7a 65 72 6f 2e 20 20 41 6c 73 6f 2c 20 69  n zero.  Also, i
1f190 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
1f1a0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
1f1b0 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c  EF6 core assembl
1f1c0 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
1f1d0 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20 20 20  , this must..   
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1f1f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a 65 72        return zer
1f200 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
1f210 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1f220 20 20 20 20 20 20 20 20 69 66 20 28 6e 6f 4e 65          if (noNe
1f230 74 46 78 34 30 20 26 26 20 6e 6f 4e 65 74 46 78  tFx40 && noNetFx
1f240 34 35 20 26 26 20 6e 6f 4e 65 74 46 78 34 35 31  45 && noNetFx451
1f250 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f260 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1f270 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1f280 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
1f290 73 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  sSystemEf6Assemb
1f2a0 6c 79 41 76 61 69 6c 61 62 6c 65 28 29 3b 0d 0a  lyAvailable();..
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f320 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
1f330 61 6d 65 20 47 65 74 43 6f 72 65 41 73 73 65 6d  ame GetCoreAssem
1f340 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 52 45 51  blyName() /* REQ
1f350 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  UIRED */..      
1f360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f370 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 72           if (cor
1f380 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d  eAssemblyName ==
1f390 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f3a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f3c0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  oreAssemblyName 
1f3d0 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
1f3e0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
1f3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f400 20 20 20 20 20 20 20 20 20 43 6f 72 65 46 69 6c           CoreFil
1f410 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
1f420 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
1f430 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f440 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f450 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d   coreAssemblyNam
1f460 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f470 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f480 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f4d0 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1f4e0 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69 6e 71 41  blyName GetLinqA
1f4f0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a  ssemblyName() /*
1f500 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20   OPTIONAL */..  
1f510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f520 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f530 28 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64  (IsLinqSupported
1f540 28 29 20 26 26 20 28 6c 69 6e 71 41 73 73 65 6d  () && (linqAssem
1f550 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  blyName == null)
1f560 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f580 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 41 73            linqAs
1f590 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
1f5a0 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
1f5b0 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65      LinqFileName
1f5e0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f610 20 20 20 20 20 72 65 74 75 72 6e 20 6c 69 6e 71       return linq
1f620 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
1f630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f640 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f6a0 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61  ublic AssemblyNa
1f6b0 6d 65 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c  me GetEf6Assembl
1f6c0 79 4e 61 6d 65 28 29 20 2f 2a 20 4f 50 54 49 4f  yName() /* OPTIO
1f6d0 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
1f6e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f6f0 20 20 20 20 20 20 20 69 66 20 28 49 73 45 66 36         if (IsEf6
1f700 53 75 70 70 6f 72 74 65 64 28 29 20 26 26 20 28  Supported() && (
1f710 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ef6AssemblyName 
1f720 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
1f730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d    ef6AssemblyNam
1f760 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  e = AssemblyName
1f770 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
1f780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f790 20 20 20 20 20 20 20 20 20 20 20 45 66 36 46 69             Ef6Fi
1f7a0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
1f7b0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
1f7c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f7d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f7e0 6e 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  n ef6AssemblyNam
1f7f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f810 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f850 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f860 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1f870 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73 69 67  blyName GetDesig
1f880 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  nerAssemblyName(
1f890 29 20 2f 2a 20 52 45 51 55 49 52 45 44 20 2a 2f  ) /* REQUIRED */
1f8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8c0 20 69 66 20 28 64 65 73 69 67 6e 65 72 41 73 73   if (designerAss
1f8d0 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c  emblyName == nul
1f8e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f8f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f900 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
1f910 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  nerAssemblyName 
1f920 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
1f930 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
1f940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f950 20 20 20 20 20 20 20 20 20 44 65 73 69 67 6e 65           Designe
1f960 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  rFileName); /* t
1f970 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1f980 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f9a0 74 75 72 6e 20 64 65 73 69 67 6e 65 72 41 73 73  turn designerAss
1f9b0 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
1f9c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f9d0 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fa30 69 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e  ic string GetCon
1fa40 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  figInvariantName
1fa50 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1fa60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fa70 20 20 20 72 65 74 75 72 6e 20 49 6e 76 61 72 69     return Invari
1fa80 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  antName;..      
1fa90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1faa0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1faf0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1fb00 20 73 74 72 69 6e 67 20 47 65 74 50 72 6f 76 69   string GetProvi
1fb10 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  derInvariantName
1fb20 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1fb30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fb40 20 20 20 72 65 74 75 72 6e 20 49 73 45 66 36 53     return IsEf6S
1fb50 75 70 70 6f 72 74 65 64 28 29 20 3f 20 45 66 36  upported() ? Ef6
1fb60 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3a 20  InvariantName : 
1fb70 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fbf0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
1fc00 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65  tFactoryTypeName
1fc10 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1fc20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fc30 20 20 20 72 65 74 75 72 6e 20 49 73 45 66 36 53     return IsEf6S
1fc40 75 70 70 6f 72 74 65 64 28 29 20 3f 20 45 66 36  upported() ? Ef6
1fc50 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20  FactoryTypeName 
1fc60 3a 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  : FactoryTypeNam
1fc70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1fc80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fc90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1fca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcb0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fce0 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1fcf0 62 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f 76 69  blyName GetProvi
1fd00 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  derAssemblyName(
1fd10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1fd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fd30 20 20 72 65 74 75 72 6e 20 49 73 45 66 36 53 75    return IsEf6Su
1fd40 70 70 6f 72 74 65 64 28 29 20 3f 0d 0a 20 20 20  pported() ?..   
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 20 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e   GetEf6AssemblyN
1fd70 61 6d 65 28 29 20 3a 20 47 65 74 43 6f 72 65 41  ame() : GetCoreA
1fd80 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 3b 20 2f  ssemblyName(); /
1fd90 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1fda0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fdb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1fdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fe10 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20  ic void Dump(.. 
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1fe30 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
1fe40 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20  ceCallback..    
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1fe60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1fe80 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20   (traceCallback 
1fe90 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1fea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1fed0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1fee0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1fef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff00 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
1ff10 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bly", ForDisplay
1ff20 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20  (assembly)),..  
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ff50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ff70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ff80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ff90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffb0 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61        "LogFileNa
1ffc0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1ffd0 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  logFileName)),..
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20000 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20020 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20030 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20040 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f          "Directo
20070 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ry", ForDisplay(
20080 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
200b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
200d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
200e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
200f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e        "CoreFileN
20120 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
20130 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c  (coreFileName)),
20140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20150 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20160 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20190 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
201a0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
201b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201c0 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46            "LinqF
201d0 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
201e0 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d  play(linqFileNam
201f0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20210 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
20220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20230 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20240 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20250 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20260 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45                "E
20280 66 36 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  f6FileName", For
20290 44 69 73 70 6c 61 79 28 65 66 36 46 69 6c 65 4e  Display(ef6FileN
202a0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
202b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
202d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
202e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
202f0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20300 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20310 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20330 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  "DesignerFileNam
20340 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  e", ForDisplay(d
20350 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
20360 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20370 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20380 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
203b0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
203c0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
203d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
203e0 20 20 20 20 20 20 20 20 20 20 20 20 22 52 65 67              "Reg
203f0 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46  istryVersion", F
20400 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69 73 74  orDisplay(regist
20410 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20  ryVersion)),..  
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20440 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20460 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20470 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20480 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204a0 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72        "ConfigVer
204b0 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
204c0 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29  y(configVersion)
204d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
204e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
204f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20510 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20520 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20530 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20540 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20550 20 20 20 20 20 20 20 20 20 20 20 20 22 56 73 56              "VsV
20560 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46  ersionSuffix", F
20570 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
20580 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20  ionSuffix)),..  
20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
205b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
205d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
205e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
205f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 20 20 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d        "DebugForm
20620 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  at", ForDisplay(
20630 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a  debugFormat)),..
20640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20650 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20660 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20680 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20690 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
206a0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206c0 20 20 20 20 20 20 20 20 22 54 72 61 63 65 46 6f          "TraceFo
206d0 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
206e0 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c  y(traceFormat)),
206f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20700 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20710 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20730 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20740 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20750 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
20760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20770 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
20780 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73  llFlags", ForDis
20790 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67  play(installFlag
207a0 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  s)),..          
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
207c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
207d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
207e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
207f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20800 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20810 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
20830 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c 20 46  ebugPriority", F
20840 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 50  orDisplay(debugP
20850 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20  riority)),..    
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20870 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20880 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20890 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
208a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
208b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
208c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 20 20 20 20 22 54 72 61 63 65 50 72 69 6f 72 69      "TracePriori
208f0 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ty", ForDisplay(
20900 74 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c  tracePriority)),
20910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20920 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20930 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20960 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20970 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
20980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20990 20 20 20 20 20 20 20 20 20 20 22 50 65 72 55 73            "PerUs
209a0 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  er", ForDisplay(
209b0 70 65 72 55 73 65 72 29 29 2c 0d 0a 20 20 20 20  perUser)),..    
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
209e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
209f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20a00 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20a10 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20a20 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46      "Install", F
20a50 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
20a60 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  l)),..          
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20a80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
20a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20aa0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20ab0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20ac0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20ad0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57                "W
20af0 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70 6c 61  ow64", ForDispla
20b00 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20  y(wow64)),..    
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20b30 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20b40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20b50 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20b60 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20b70 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b90 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65      "NoRuntimeVe
20ba0 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c  rsion", ForDispl
20bb0 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ay(noRuntimeVers
20bc0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20c00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20c10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20c20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20c30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c50 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72  "NoDesktop", For
20c60 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f  Display(noDeskto
20c70 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  p)),..          
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20c90 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
20ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20cb0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20cc0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20cd0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20ce0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
20d00 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44 69  oCompact", ForDi
20d10 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29  splay(noCompact)
20d20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20d30 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20d40 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d60 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20d70 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20d80 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20d90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20da0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
20db0 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69 73 70  etFx20", ForDisp
20dc0 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c  lay(noNetFx20)),
20dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20de0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
20df0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
20e20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
20e30 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
20e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e50 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
20e60 46 78 33 35 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx35", ForDispla
20e70 79 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d 0a  y(noNetFx35)),..
20e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e90 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20ea0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20ec0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20ed0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20ee0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f00 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
20f10 34 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  40", ForDisplay(
20f20 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20  noNetFx40)),..  
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20f50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20f70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20f80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20f90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fb0 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35        "NoNetFx45
20fc0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
20fd0 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20  NetFx45)),..    
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21000 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21010 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21020 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21030 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
21040 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 31 22      "NoNetFx451"
21070 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
21080 65 74 46 78 34 35 31 29 29 2c 0d 0a 20 20 20 20  etFx451)),..    
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
210b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
210c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
210d0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
210e0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
210f0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21110 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20      "NoVs2005", 
21120 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
21130 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  005)),..        
21140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21150 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21170 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21180 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21190 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
211a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44  "NoVs2008", ForD
211d0 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29  isplay(noVs2008)
211e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
211f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21200 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
21230 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
21240 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
21250 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21260 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
21270 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c  s2010", ForDispl
21280 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a  ay(noVs2010)),..
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
212b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
212d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
212e0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
212f0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21310 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31          "NoVs201
21320 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  2", ForDisplay(n
21330 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20 20 20  oVs2012)),..    
21340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21350 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21360 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21370 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21380 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21390 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
213a0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22 2c 20      "NoVs2013", 
213d0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
213e0 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  013)),..        
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21430 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21440 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
21450 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44 69  "NoTrace", ForDi
21480 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29 2c  splay(noTrace)),
21490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
214a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
214b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
214e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
214f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
21500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21510 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6e            "NoCon
21520 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  sole", ForDispla
21530 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a  y(noConsole)),..
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21550 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
21560 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21580 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21590 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
215a0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215c0 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22 2c          "NoLog",
215d0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c 6f   ForDisplay(noLo
215e0 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21600 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21620 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
21630 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
21640 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
21650 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
21670 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c 20  hrowOnMissing", 
21680 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72 6f 77  ForDisplay(throw
21690 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20 20  OnMissing)),..  
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
216c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
216e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
216f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
21700 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c 20        "WhatIf", 
21730 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74 49  ForDisplay(whatI
21740 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  f)),..          
21750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21760 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21780 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
21790 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
217a0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
217b0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
217d0 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70 6c 61  ebug", ForDispla
217e0 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20 20 20  y(debug)),..    
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21810 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21820 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21830 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21840 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
21850 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21870 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46      "Verbose", F
21880 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73  orDisplay(verbos
21890 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
218b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
218c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
218d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
218e0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
218f0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
21900 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
21920 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70  onfirm", ForDisp
21930 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a  lay(confirm)),..
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
21960 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
219e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
219f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a10 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21a20 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21a30 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21a40 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 54 69       "AssemblyTi
21a70 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  tle",..         
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65     ForDisplay(Ge
21aa0 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61  tAssemblyTitle(a
21ab0 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20  ssembly))),..   
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ad0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21ae0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
21b10 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
21b20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
21b30 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
21b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b50 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67   "AssemblyConfig
21b60 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  uration",..     
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b80 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
21b90 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e  y(GetAssemblyCon
21ba0 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73 65 6d  figuration(assem
21bb0 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  bly))),..       
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21be0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
21bf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c60 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
21c70 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
21c80 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
21c90 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21cb0 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 22  IsLinqSupported"
21cc0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 49 73 4c  , ForDisplay(IsL
21cd0 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 29 29  inqSupported()))
21ce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21cf0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21d00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
21d30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
21d40 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
21d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21d60 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45 66             "IsEf
21d70 36 53 75 70 70 6f 72 74 65 64 22 2c 20 46 6f 72  6Supported", For
21d80 44 69 73 70 6c 61 79 28 49 73 45 66 36 53 75 70  Display(IsEf6Sup
21d90 70 6f 72 74 65 64 28 29 29 29 2c 0d 0a 20 20 20  ported())),..   
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21db0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21dc0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21e30 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21e40 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
21e50 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 72 65          "GetCore
21e80 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
21e90 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21eb0 20 20 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d      GetCoreAssem
21ec0 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  blyName())), tra
21ed0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
21f00 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
21f10 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
21f20 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
21f40 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d  tLinqAssemblyNam
21f50 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
21f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21f70 20 20 20 20 20 20 20 20 20 47 65 74 4c 69 6e 71           GetLinq
21f80 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29  AssemblyName()))
21f90 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
21fa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21fb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21fc0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
21fd0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
21fe0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22000 20 20 22 47 65 74 45 66 36 41 73 73 65 6d 62 6c    "GetEf6Assembl
22010 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
22020 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
22040 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  Ef6AssemblyName(
22050 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
22060 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22070 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22080 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22090 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
220a0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 22 47 65 74 44 65 73 69 67 6e 65       "GetDesigne
220d0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  rAssemblyName", 
220e0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 20 20 20 20 20 47 65 74 44 65 73 69 67 6e 65 72       GetDesigner
22110 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29  AssemblyName()))
22120 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
22130 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22140 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22180 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
221a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
221b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
221c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221e0 20 20 20 20 20 22 47 65 74 43 6f 6e 66 69 67 49       "GetConfigI
221f0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46  nvariantName", F
22200 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 20 20 20 47 65 74 43 6f 6e 66 69 67 49 6e 76      GetConfigInv
22230 61 72 69 61 6e 74 4e 61 6d 65 28 29 29 29 2c 20  ariantName())), 
22240 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
22250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22260 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
22270 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
22280 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
22290 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 22 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61  "GetProviderInva
222c0 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44  riantName", ForD
222d0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61   GetProviderInva
22300 72 69 61 6e 74 4e 61 6d 65 28 29 29 29 2c 20 74  riantName())), t
22310 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22330 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22340 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22350 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22360 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22380 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61  GetFactoryTypeNa
22390 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
223a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223b0 20 20 20 20 20 20 20 20 20 20 47 65 74 46 61 63            GetFac
223c0 74 6f 72 79 54 79 70 65 4e 61 6d 65 28 29 29 29  toryTypeName()))
223d0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
223e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
223f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22400 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
22410 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
22420 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 20 22 47 65 74 50 72 6f 76 69 64 65 72 41 73    "GetProviderAs
22450 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
22460 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22480 20 20 47 65 74 50 72 6f 76 69 64 65 72 41 73 73    GetProviderAss
22490 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74  emblyName())), t
224a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
224d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
224e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
224f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22540 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
22550 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
22560 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
22570 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
22580 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20  ly assembly;..  
22590 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
225a0 20 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62   Assembly Assemb
225b0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
225c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
225d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
225e0 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20  assembly; }..   
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22600 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61   { assembly = va
22610 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22620 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22630 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22670 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22680 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22690 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61  string logFileNa
226a0 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
226b0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c   public string L
226c0 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  ogFileName..    
226d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
226e0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
226f0 20 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e   return logFileN
22700 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
22710 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
22720 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  gFileName = valu
22730 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22750 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22790 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
227a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
227b0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d  ring directory;.
227c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
227d0 6c 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63  lic string Direc
227e0 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
227f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22800 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22810 6e 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a  n directory; }..
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 73 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20  set { directory 
22840 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
22850 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22860 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
228a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
228b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
228c0 61 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ate string coreF
228d0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
228e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
228f0 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ing CoreFileName
22900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22920 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
22930 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  reFileName; }.. 
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
22950 65 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d  et { coreFileNam
22960 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
22970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22980 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
229d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
229e0 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e  ivate string lin
229f0 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
22a00 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
22a10 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61  tring LinqFileNa
22a20 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
22a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22a40 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22a50 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  linqFileName; }.
22a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a70 20 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e   set { linqFileN
22a80 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
22a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22b00 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 65  private string e
22b10 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  f6FileName;..   
22b20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22b30 73 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61  string Ef6FileNa
22b40 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
22b50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22b60 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22b70 65 66 36 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  ef6FileName; }..
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 73 65 74 20 7b 20 65 66 36 46 69 6c 65 4e 61 6d  set { ef6FileNam
22ba0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
22bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22c20 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73  ivate string des
22c30 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
22c40 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
22c50 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  ic string Design
22c60 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
22c70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22c80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
22c90 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72   return designer
22ca0 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22cc0 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   { designerFileN
22cd0 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
22d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22d50 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 72  private string r
22d60 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d  egistryVersion;.
22d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
22d80 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69 73  lic string Regis
22d90 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  tryVersion..    
22da0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22db0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
22dc0 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72 79   return registry
22dd0 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
22de0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
22df0 7b 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  { registryVersio
22e00 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
22e10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22e20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22e80 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 6e  ivate string con
22e90 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
22ea0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
22eb0 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65 72  string ConfigVer
22ec0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
22ed0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22ee0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22ef0 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b  n configVersion;
22f00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22f10 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 67      set { config
22f20 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
22f30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22f40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22f50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22fa0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
22fb0 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66  ng vsVersionSuff
22fc0 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix;..           
22fd0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 56   public string V
22fe0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d 0a  sVersionSuffix..
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23010 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56 65  et { return vsVe
23020 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d 0a  rsionSuffix; }..
23030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23040 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e 53  set { vsVersionS
23050 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20 7d  uffix = value; }
23060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23070 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
230c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
230d0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
230e0 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20   debugFormat;.. 
230f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
23100 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f  c string DebugFo
23110 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
23120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23130 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23140 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d  n debugFormat; }
23150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23160 20 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72    set { debugFor
23170 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
23180 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23190 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
231a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
231e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
231f0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74  private string t
23200 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
23210 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
23220 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
23230 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
23240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23250 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23260 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a  traceFormat; }..
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61  set { traceForma
23290 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
232a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
232b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
232c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23310 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61  ivate InstallFla
23320 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b  gs installFlags;
23330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23340 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67  blic InstallFlag
23350 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  s InstallFlags..
23360 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23380 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
23390 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20  allFlags; }..   
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
233b0 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   { installFlags 
233c0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
233d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
233e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
233f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23430 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23440 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
23450 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  y debugPriority;
23460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23470 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
23480 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74 79  ty DebugPriority
23490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
234a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
234b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
234c0 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  bugPriority; }..
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 73 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72  set { debugPrior
234f0 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
23500 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23510 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23570 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69  private TracePri
23580 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
23590 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
235a0 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72    public TracePr
235b0 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
235c0 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
235d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
235e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
235f0 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
23600 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23610 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 50      set { traceP
23620 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
23630 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23640 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23650 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23690 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
236a0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
236b0 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20 20   perUser;..     
236c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
236d0 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20 20  ol PerUser..    
236e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
236f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23700 20 72 65 74 75 72 6e 20 70 65 72 55 73 65 72 3b   return perUser;
23710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23720 20 20 20 20 73 65 74 20 7b 20 70 65 72 55 73 65      set { perUse
23730 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  r = value; }..  
23740 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23750 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
237a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
237b0 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61  ivate bool insta
237c0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
237d0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73   public bool Ins
237e0 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  tall..          
237f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23800 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23810 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20  n install; }..  
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23830 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61  t { install = va
23840 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23860 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
238b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
238c0 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20 20  bool wow64;..   
238d0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
238e0 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20 20  bool Wow64..    
238f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23900 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23910 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20 7d   return wow64; }
23920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23930 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d 20    set { wow64 = 
23940 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
23950 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23960 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
239b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
239c0 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65  e bool noRuntime
239d0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
239e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
239f0 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l NoRuntimeVersi
23a00 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
23a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23a20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23a30 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
23a40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
23a50 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75 6e       set { noRun
23a60 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76 61  timeVersion = va
23a70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23a80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23a90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23ae0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23af0 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  bool noDesktop;.
23b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
23b10 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74  lic bool NoDeskt
23b20 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  op..            
23b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23b40 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
23b50 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20  noDesktop; }..  
23b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
23b70 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  t { noDesktop = 
23b80 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
23b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23ba0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23bf0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
23c00 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74  e bool noCompact
23c10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
23c20 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d  ublic bool NoCom
23c30 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20  pact..          
23c40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23c50 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23c60 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a  n noCompact; }..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20  set { noCompact 
23c90 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
23ca0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23cb0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
23cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
23d00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
23d10 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
23d20 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
23d30 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
23d40 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20  etFx20..        
23d50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23d60 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
23d70 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d  urn noNetFx20; }
23d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d90 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32    set { noNetFx2
23da0 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
23db0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23e20 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
23e30 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx35;..         
23e40 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
23e50 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20 20  oNetFx35..      
23e60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23e70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
23e80 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35 3b  eturn noNetFx35;
23e90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23ea0 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
23eb0 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x35 = value; }..
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23f30 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
23f40 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
23f50 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
23f60 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
23f70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23f80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23f90 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
23fa0 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
23fb0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
23fc0 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
23fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24030 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24040 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
24050 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
24060 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
24070 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
24080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
240a0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
240b0 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
240c0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
240d0 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
240e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
240f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24100 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24140 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24150 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
24160 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20   noNetFx451;..  
24170 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
24180 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 31   bool NoNetFx451
24190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
241a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
241b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
241c0 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20 20  NetFx451; }..   
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
241e0 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20   { noNetFx451 = 
241f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24210 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24260 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24270 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b  e bool noVs2005;
24280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
24290 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
242a0 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  05..            
242b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
242c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
242d0 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20  noVs2005; }..   
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
242f0 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61   { noVs2005 = va
24300 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
24310 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24320 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24380 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
24390 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
243a0 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
243b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
243c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
243d0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
243e0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
243f0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
24400 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
24410 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24430 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24470 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24480 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
24490 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
244a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
244b0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
244c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
244e0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
244f0 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
24500 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
24510 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
24520 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24530 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24540 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24580 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24590 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
245a0 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20 20   noVs2012;..    
245b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
245c0 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20 20  ool NoVs2012..  
245d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
245f0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
24600 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  12; }..         
24610 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
24620 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20 7d  s2012 = value; }
24630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24690 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
246a0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
246b0 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
246c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
246d0 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20 20  l NoVs2013..    
246e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
246f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
24700 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 33   return noVs2013
24710 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24720 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
24730 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  013 = value; }..
24740 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24750 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
24760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
247b0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54  private bool noT
247c0 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  race;..         
247d0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
247e0 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20  oTrace..        
247f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24800 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
24810 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a  urn noTrace; }..
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20  set { noTrace = 
24840 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24850 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24860 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
248b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
248c0 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65  e bool noConsole
248d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
248e0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e  ublic bool NoCon
248f0 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  sole..          
24900 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24910 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
24920 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a  n noConsole; }..
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20  set { noConsole 
24950 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24960 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24970 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
249c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
249d0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d  ate bool noLog;.
249e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
249f0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a  lic bool NoLog..
24a00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24a20 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f  et { return noLo
24a30 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
24a40 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f        set { noLo
24a50 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
24a60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24a70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24ad0 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f 77  ivate bool throw
24ae0 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
24af0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
24b00 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73 69  ool ThrowOnMissi
24b10 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
24b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24b30 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24b40 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 20  throwOnMissing; 
24b50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24b60 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f 6e     set { throwOn
24b70 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65 3b  Missing = value;
24b80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24ba0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24be0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24bf0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
24c00 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
24c10 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
24c20 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
24c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24c40 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24c50 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
24c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c70 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20   set { whatIf = 
24c80 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24c90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24ca0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24cf0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24d00 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a 20  e bool debug;.. 
24d10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24d20 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20 20  c bool Debug..  
24d30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24d40 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24d50 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 3b   { return debug;
24d60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24d70 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 20      set { debug 
24d80 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24d90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24da0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24df0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24e00 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65  ate bool verbose
24e10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24e20 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f  ublic bool Verbo
24e30 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
24e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24e50 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24e60 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20  verbose; }..    
24e70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24e80 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75  { verbose = valu
24e90 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24ea0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24eb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ef0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24f00 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
24f10 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20  ol confirm;..   
24f20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24f30 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20  bool Confirm..  
24f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24f60 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72   { return confir
24f70 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  m; }..          
24f80 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66        set { conf
24f90 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  irm = value; }..
24fa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24fb0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
24fc0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
24fd0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
24fe0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
24ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25030 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25040 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65     #region Frame
25050 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a  workList Class..
25060 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25070 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61  sealed class Fra
25080 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20  meworkList..    
25090 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
250a0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
250b0 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
250c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
250d0 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ic FrameworkList
250e0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
250f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25100 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
25110 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
25120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
25130 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25140 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25190 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
251a0 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
251b0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
251c0 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
251d0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d  tryKey rootKey;.
251e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
251f0 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
25200 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20  Key RootKey..   
25210 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25220 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
25230 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79  { return rootKey
25240 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25250 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b       set { rootK
25260 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ey = value; }.. 
25270 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
252d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
252e0 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73  rivate StringLis
252f0 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20  t names;..      
25300 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
25310 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20  ingList Names.. 
25320 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
25340 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73  t { return names
25350 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25360 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73       set { names
25370 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
25380 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25390 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
253e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
253f0 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20  vate VersionMap 
25400 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20  versions;..     
25410 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
25420 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e  rsionMap Version
25430 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
25440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25450 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
25460 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
25470 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
25480 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c  { versions = val
25490 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
254a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
254b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25500 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
25510 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f  tringList platfo
25520 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20  rmNames;..      
25530 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
25540 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d  ingList Platform
25550 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..         
25560 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25570 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
25580 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  rn platformNames
25590 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
255a0 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66       set { platf
255b0 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65  ormNames = value
255c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
255d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
255e0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
255f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
25600 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
25610 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25660 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
25670 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  VsList Class..  
25680 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
25690 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73  aled class VsLis
256a0 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
256b0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
256c0 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
256d0 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
256e0 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74     public VsList
256f0 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
25700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25710 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
25720 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
25730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
25740 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
25750 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
257a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
257b0 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
257c0 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
257d0 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
257e0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
257f0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
25800 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
25810 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a  tryKey RootKey..
25820 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25840 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74  et { return root
25850 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Key; }..        
25860 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f          set { ro
25870 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d  otKey = value; }
25880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
258a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
258e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
258f0 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f    private Versio
25900 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d  nList versions;.
25910 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
25920 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20  lic VersionList 
25930 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
25940 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25950 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
25960 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20  eturn versions; 
25970 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
25980 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e     set { version
25990 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
259a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
259b0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
259c0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
259d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
259e0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  on..        #end
259f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
25a00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25a50 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
25a60 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61  vate Constant Da
25a70 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
25a80 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25a90 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   CoreFileName = 
25aa0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
25ab0 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ite.dll";..     
25ac0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
25ad0 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65   string LinqFile
25ae0 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
25af0 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
25b00 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
25b10 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
25b20 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20  ing Ef6FileName 
25b30 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
25b40 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d  QLite.EF6.dll";.
25b50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25b60 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25b70 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
25b80 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
25b90 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
25ba0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
25bb0 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
25bc0 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
25bd0 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
25be0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
25bf0 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
25c00 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
25c10 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
25c20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25c30 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
25c40 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
25c50 20 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20   "SQLite";....  
25c60 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
25c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25cb0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25cc0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25cd0 73 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20 20 20  scription =..   
25ce0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
25cf0 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72  ramework Data Pr
25d00 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
25d10 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
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 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25d70 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
25d80 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67  string CLRv2Imag
25d90 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
25da0 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d  = "v2.0.50727";.
25db0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25dc0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c   const string CL
25dd0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
25de0 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33  ersion = "v4.0.3
25df0 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  0319";....      
25e00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25e50 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
25e60 73 74 20 73 74 72 69 6e 67 20 53 79 73 74 65 6d  st string System
25e70 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  Ef6AssemblyName 
25e80 3d 20 22 45 6e 74 69 74 79 46 72 61 6d 65 77 6f  = "EntityFramewo
25e90 72 6b 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  rk, " +..       
25ea0 20 20 20 20 20 22 56 65 72 73 69 6f 6e 3d 36 2e       "Version=6.
25eb0 30 2e 30 2e 30 2c 20 43 75 6c 74 75 72 65 3d 6e  0.0.0, Culture=n
25ec0 65 75 74 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65  eutral, PublicKe
25ed0 79 54 6f 6b 65 6e 3d 62 37 37 61 35 63 35 36 31  yToken=b77a5c561
25ee0 39 33 34 65 30 38 39 22 3b 0d 0a 0d 0a 20 20 20  934e089";....   
25ef0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25f40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25f50 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e 61 6d  const string Nam
25f60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 20  eAndValueFormat 
25f70 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20  = "{0}: {1}";.. 
25f80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
25f90 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f 67 46  onst string LogF
25fa0 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f  ileSuffix = ".lo
25fb0 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  g";....        /
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 2f 2f 2f 2f 2f 2f  ////////////////
26000 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26010 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
26020 73 74 72 69 6e 67 20 56 73 44 65 76 45 6e 76 53  string VsDevEnvS
26030 65 74 75 70 46 6f 72 6d 61 74 20 3d 20 22 7b 30  etupFormat = "{0
26040 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {1}";....    
26050 20 20 20 20 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 2f  ////////////////
26090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
260a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
260b0 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
260c0 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
260d0 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
260e0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
260f0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
26100 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
26110 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
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 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
26170 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
26180 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
26190 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
261a0 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
261b0 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
261c0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
261d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
261e0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
261f0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
26200 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
26210 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
26270 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
26280 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
26290 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
262a0 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
262b0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
262c0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
262d0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
262e0 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
262f0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
26300 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26360 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
26370 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
26380 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
26390 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
263e0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
263f0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
26400 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
26410 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
26420 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
26430 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
26440 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
26450 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
26460 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
26470 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
26480 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
26490 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
264a0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
264b0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
264c0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
264d0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
264e0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
264f0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
26500 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
26510 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
26520 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 2f  ////////////////
26570 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26580 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
26590 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
265a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
265b0 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
265c0 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
265d0 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
265e0 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
265f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26600 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
26610 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
26620 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
26630 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
26640 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
26650 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
26660 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
26670 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
26680 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26690 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
266a0 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
266b0 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
266c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
266d0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
266e0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
266f0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
26700 0d 0a 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
26760 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
26770 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
26780 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
26790 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
267a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
267b0 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
267c0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
267d0 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
267e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
267f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26840 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
26850 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
26860 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26870 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
26880 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
26890 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
268a0 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
268b0 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
268c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
268d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
268e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26930 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
26940 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
26950 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
26960 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
26970 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
26980 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
26990 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
269a0 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
269b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
269c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
269d0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
269e0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
269f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26a00 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
26a10 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
26a20 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
26a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26a40 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
26a50 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
26a60 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
26a70 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
26a80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
26a90 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
26aa0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
26ab0 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
26ac0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
26ae0 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
26af0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
26b00 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
26b10 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26b30 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
26b40 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
26b50 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
26b60 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
26b70 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
26b80 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
26b90 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
26ba0 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
26bb0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
26bc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26bd0 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
26be0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26bf0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c20 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
26c40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26c50 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
26c60 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
26c70 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
26c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
26c90 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
26ca0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26cb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26cc0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
26cd0 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
26ce0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
26cf0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
26d00 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
26d10 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
26d20 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
26d30 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
26d40 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
26d50 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
26d60 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
26d70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26d80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26dd0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
26de0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
26df0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
26e00 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
26e10 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
26e20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
26e30 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
26e40 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26e50 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
26e60 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
26e70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
26e80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
26e90 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
26ea0 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
26eb0 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
26ec0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26ed0 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
26ee0 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
26ef0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
26f00 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
26f10 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
26f20 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26f80 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
26f90 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
26fa0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
26fb0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
26fc0 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
26fd0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
26fe0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
26ff0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
27000 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
27010 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
27020 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
27030 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
27040 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27050 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
27060 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
27070 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
27080 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
27090 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
270a0 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
270b0 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
270c0 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
270d0 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
270e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
270f0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
27100 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
27110 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
27120 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
27130 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
27140 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
27150 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
27160 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
27170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
27190 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
271a0 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
271b0 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
271c0 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
271d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
271e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27230 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
27240 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
27250 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
27260 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
27270 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
27280 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
27290 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
272a0 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey rootKey..    
272b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
272c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
272d0 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
272e0 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
272f0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
27300 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c  y.CurrentUser) |
27310 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
27320 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65     Object.Refere
27330 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
27340 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
27350 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20  lMachine);..    
27360 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27370 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
273b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
273c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
273d0 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f  ic string GetRoo
273e0 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
273f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
27400 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
27410 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
27420 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
27430 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27440 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
27450 20 20 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 41      // BUGFIX: A
27460 70 70 61 72 65 6e 74 6c 79 2c 20 74 68 65 20 70  pparently, the p
27470 65 72 2d 75 73 65 72 20 72 65 67 69 73 74 72 79  er-user registry
27480 20 68 69 76 65 20 64 6f 65 73 20 6e 6f 74 20 75   hive does not u
27490 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
274a0 2f 2f 20 20 20 20 20 20 20 20 20 74 68 65 20 22  //         the "
274b0 57 6f 77 36 34 33 32 4e 6f 64 65 22 20 6e 6f 64  Wow6432Node" nod
274c0 65 20 74 6f 20 73 74 6f 72 65 20 73 65 74 74 69  e to store setti
274d0 6e 67 73 20 66 6f 72 20 33 32 2d 62 69 74 0d 0a  ngs for 32-bit..
274e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
274f0 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69         applicati
27500 6f 6e 73 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61  ons running on a
27510 20 36 34 2d 62 69 74 20 6f 70 65 72 61 74 69 6e   64-bit operatin
27520 67 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  g system...     
27530 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
27540 20 20 54 69 63 6b 65 74 20 5b 61 30 36 37 37 33    Ticket [a06773
27550 30 39 66 30 5d 20 68 61 73 20 66 75 72 74 68 65  09f0] has furthe
27560 72 20 64 65 74 61 69 6c 73 2e 0d 0a 20 20 20 20  r details...    
27570 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27580 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
27590 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
275a0 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61  }{1}", RootKeyNa
275b0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
275c0 20 20 20 20 20 21 70 65 72 55 73 65 72 20 26 26       !perUser &&
275d0 20 77 6f 77 36 34 20 26 26 20 49 73 36 34 42 69   wow64 && Is64Bi
275e0 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27600 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34 53 75    "\\" + Wow64Su
27610 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72 69 6e  bKeyName : Strin
27620 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
27630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27680 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27690 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
276a0 63 20 73 74 72 69 6e 67 20 47 65 74 53 79 73 74  c string GetSyst
276b0 65 6d 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  emDirectory(..  
276c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
276d0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
276e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
276f0 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
27700 20 20 20 20 20 20 20 20 20 69 66 20 28 77 6f 77           if (wow
27710 36 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64)..           
27720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27730 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
27740 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 3d 20  rectoryWow64 == 
27750 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27760 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
27780 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
27790 36 34 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  64 =..          
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 6e                Un
277b0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
277c0 73 2e 47 65 74 53 79 73 74 65 6d 44 69 72 65 63  s.GetSystemDirec
277d0 74 6f 72 79 28 29 3b 0d 0a 20 20 20 20 20 20 20  tory();..       
277e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27800 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63  turn systemDirec
27810 74 6f 72 79 57 6f 77 36 34 3b 0d 0a 20 20 20 20  toryWow64;..    
27820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27830 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e         else..#en
27840 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
27850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27860 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 44 69      if (systemDi
27870 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29  rectory == null)
27880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27890 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
278a0 63 74 6f 72 79 20 3d 20 45 6e 76 69 72 6f 6e 6d  ctory = Environm
278b0 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74  ent.SystemDirect
278c0 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory;....        
278d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 73          return s
278e0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d  ystemDirectory;.
278f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27900 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27910 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
27920 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
27980 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69  ion Generic Stri
27990 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ng Handling..   
279a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
279b0 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69  tic string ForDi
279c0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
279d0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
279e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
279f0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
27a00 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
27a10 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
27a20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27a30 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a  rn "<null>";....
27a40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27a50 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ng result;..    
27a60 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
27a70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70  e = value.GetTyp
27a80 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
27a90 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
27aa0 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e  typeof(XmlElemen
27ab0 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
27ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27ad0 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65      XmlElement e
27ae0 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65  lement = (XmlEle
27af0 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ment)value;.... 
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27b10 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e  esult = element.
27b20 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20  OuterXml;..     
27b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27b40 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
27b50 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65  ype == typeof(Ve
27b60 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
27b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27b80 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
27b90 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69  version = (Versi
27ba0 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  on)value;....   
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
27bc0 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
27bd0 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73  mat("v{0}", vers
27be0 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
27bf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27c00 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
27c10 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73  == typeof(Proces
27c20 73 53 74 61 72 74 49 6e 66 6f 29 29 0d 0a 20 20  sStartInfo))..  
27c30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
27c50 63 65 73 73 53 74 61 72 74 49 6e 66 6f 20 73 74  cessStartInfo st
27c60 61 72 74 49 6e 66 6f 20 3d 20 28 50 72 6f 63 65  artInfo = (Proce
27c70 73 73 53 74 61 72 74 49 6e 66 6f 29 76 61 6c 75  ssStartInfo)valu
27c80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
27c90 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
27ca0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cc0 20 20 20 22 66 69 6c 65 4e 61 6d 65 20 3d 20 7b     "fileName = {
27cd0 30 7d 2c 20 61 72 67 75 6d 65 6e 74 73 20 3d 20  0}, arguments = 
27ce0 7b 31 7d 2c 20 77 6f 72 6b 69 6e 67 44 69 72 65  {1}, workingDire
27cf0 63 74 6f 72 79 20 3d 20 7b 32 7d 2c 20 22 20 2b  ctory = {2}, " +
27d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d10 20 20 20 20 20 20 22 75 73 65 53 68 65 6c 6c 45        "useShellE
27d20 78 65 63 75 74 65 20 3d 20 7b 33 7d 2c 20 72 65  xecute = {3}, re
27d30 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75  directStandardOu
27d40 74 70 75 74 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d  tput = {4}, " +.
27d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d60 20 20 20 20 20 22 72 65 64 69 72 65 63 74 53 74       "redirectSt
27d70 61 6e 64 61 72 64 45 72 72 6f 72 20 3d 20 7b 35  andardError = {5
27d80 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  }", ForDisplay(.
27d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27da0 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 46       startInfo.F
27db0 69 6c 65 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73  ileName), ForDis
27dc0 70 6c 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 41  play(startInfo.A
27dd0 72 67 75 6d 65 6e 74 73 29 2c 0d 0a 20 20 20 20  rguments),..    
27de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27df0 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72 74  ForDisplay(start
27e00 49 6e 66 6f 2e 57 6f 72 6b 69 6e 67 44 69 72 65  Info.WorkingDire
27e10 63 74 6f 72 79 29 2c 20 46 6f 72 44 69 73 70 6c  ctory), ForDispl
27e20 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
27e30 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49 6e           startIn
27e40 66 6f 2e 55 73 65 53 68 65 6c 6c 45 78 65 63 75  fo.UseShellExecu
27e50 74 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  te), ForDisplay(
27e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e70 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
27e80 52 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64  RedirectStandard
27e90 4f 75 74 70 75 74 29 2c 20 46 6f 72 44 69 73 70  Output), ForDisp
27ea0 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
27eb0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 49            startI
27ec0 6e 66 6f 2e 52 65 64 69 72 65 63 74 53 74 61 6e  nfo.RedirectStan
27ed0 64 61 72 64 45 72 72 6f 72 29 29 3b 20 2f 2a 20  dardError)); /* 
27ee0 52 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20  RECURSIVE */..  
27ef0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27f00 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
27f10 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
27f20 28 50 72 6f 63 65 73 73 29 29 0d 0a 20 20 20 20  (Process))..    
27f30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27f40 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
27f50 73 73 20 70 72 6f 63 65 73 73 20 3d 20 28 50 72  ss process = (Pr
27f60 6f 63 65 73 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a  ocess)value;....
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 72 65 73 75 6c 74 20 3d 20 70 72 6f 63 65 73 73  result = process
27f90 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  .Id.ToString();.
27fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27fb0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
27fc0 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
27fd0 65 6f 66 28 44 61 74 61 52 65 63 65 69 76 65 64  eof(DataReceived
27fe0 45 76 65 6e 74 41 72 67 73 29 29 0d 0a 20 20 20  EventArgs))..   
27ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28000 20 20 20 20 20 20 20 20 20 20 20 20 44 61 74 61              Data
28010 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
28020 73 20 65 76 65 6e 74 41 72 67 73 20 3d 20 28 44  s eventArgs = (D
28030 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e 74  ataReceivedEvent
28040 41 72 67 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  Args)value;.... 
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28060 65 73 75 6c 74 20 3d 20 46 6f 72 44 69 73 70 6c  esult = ForDispl
28070 61 79 28 65 76 65 6e 74 41 72 67 73 2e 44 61 74  ay(eventArgs.Dat
28080 61 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45  a); /* RECURSIVE
28090 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
280a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
280b0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
280c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
280d0 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61       result = va
280e0 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  lue.ToString();.
280f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28100 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65     if (result.Le
28110 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20  ngth == 0)..    
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28130 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22  return "<empty>"
28140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28150 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
28160 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73    type.IsSubclas
28190 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65  sOf(typeof(Value
281a0 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a  Type)) ? "{0}" :
281b0 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20   "\"{0}\"",..   
281c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281d0 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20   result);..     
281e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
281f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
28200 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
28210 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
28220 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
28230 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28270 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28280 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65      #region Asse
28290 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48  mbly Attribute H
282a0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
282b0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
282c0 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
282d0 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d  yConfiguration(.
282e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
282f0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a  embly assembly..
28300 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28310 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28320 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
28330 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
28340 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28350 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
28360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28380 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
28390 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d  mbly.IsDefined(.
283a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
283c0 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
283d0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
283e0 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  te), false))..  
283f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28400 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
28420 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
28430 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66  onAttribute conf
28440 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20  iguration =..   
28450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28460 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62           (Assemb
28470 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41  lyConfigurationA
28480 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20  ttribute)..     
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
284b0 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75  GetCustomAttribu
284c0 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284e0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
284f0 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
28500 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20  onAttribute),.. 
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
28530 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66       return conf
28560 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67  iguration.Config
28570 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  uration;..      
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
285b0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
285c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
285f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28600 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28620 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
28630 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28640 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28690 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
286a0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
286b0 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a  AssemblyTitle(..
286c0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
286d0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
286e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
286f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28700 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
28710 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
28720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28730 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28760 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
28770 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
28780 20 20 20 20 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 74 79 70 65              type
287a0 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
287b0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
287c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
287d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
287e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287f0 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c      AssemblyTitl
28800 65 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65  eAttribute title
28810 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28830 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
28840 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
28870 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
28880 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
288b0 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
288c0 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d  te), false)[0];.
288d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
288e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
288f0 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a  n title.Title;..
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28920 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28930 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
28940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28960 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
28970 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
28980 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
28990 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
289a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
289b0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
289c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
289d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28a30 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46    #region .NET F
28a40 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e  ramework Handlin
28a50 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
28a60 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
28a70 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f   GetFrameworkRoo
28a80 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
28a90 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
28aa0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
28ab0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
28ac0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28ad0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28ae0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
28af0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d  g.Format("{0}\\M
28b00 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72  icrosoft\\.NETFr
28b10 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20  amework",..     
28b20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f             GetRo
28b30 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
28b40 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20  r, wow64));..   
28b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28b60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28bb0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28bc0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
28bd0 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d  ameworkKeyName(.
28be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
28bf0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
28c00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28c10 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
28c20 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
28c30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
28c40 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
28c50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
28c60 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
28c70 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
28c80 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28c90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28ca0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
28cb0 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
28cc0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
28cd0 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
28cf0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
28d00 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d  }\\v{2}\\{3}" :.
28d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
28d30 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d  \\{1}\\v{2}";...
28d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
28d50 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
28d60 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f  t(format, GetRoo
28d70 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
28d80 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20  , wow64),..     
28d90 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
28da0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
28db0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
28dc0 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  formName);..    
28dd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28de0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28e30 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28e40 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61  ic string GetIma
28e50 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
28e60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
28e70 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a  tring fileName..
28e80 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
28e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28ea0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
28eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28ec0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
28ed0 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 41 73  ly assembly = As
28ee0 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
28ef0 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 0d 0a  nOnlyLoadFrom(..
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f10 20 20 20 20 66 69 6c 65 4e 61 6d 65 29 3b 20 2f      fileName); /
28f20 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20  * throw */....  
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28f40 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
28f50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28f60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28f70 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75  assembly.ImageRu
28f80 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20  ntimeVersion;.. 
28f90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28fa0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
28fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
29000 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
29010 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29060 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29070 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
29080 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
29090 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
290a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
290b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
290c0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
290d0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
290e0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
290f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
29100 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
29110 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
29120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29130 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
29140 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
29150 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
29160 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
29170 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
29180 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
29190 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
291a0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
291b0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
291c0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
291d0 2c 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f  , GetFrameworkRo
291e0 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
291f0 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20  r, wow64),..    
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
29220 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
29230 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29240 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
29250 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29270 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
29290 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
292a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
292b0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
292c0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
292d0 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20   "InstallRoot", 
292e0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
292f0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
29300 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
29310 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67  (value is string
29320 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
29330 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
29340 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
29350 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
29360 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.Combine(..  
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c    (string)value,
29390 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
293a0 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b  v{0}", framework
293b0 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  Version));..    
293c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
293d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
293e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
293f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29440 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
29450 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61  er-Framework/Pla
29460 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a  tform Handling..
29470 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29480 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
29490 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c  ializeFrameworkL
294a0 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
294b0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
294c0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
294d0 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
294e0 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
294f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
29500 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c    ref FrameworkL
29510 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
29520 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  t..            )
29530 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
29540 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
29550 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
29560 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29570 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29580 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f  st = new Framewo
29590 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  rkList();....   
295a0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
295b0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
295c0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
295e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
295f0 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d  ey = rootKey;...
29600 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29660 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29670 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
29680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
296a0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
296b0 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e  ames = new Strin
296c0 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  gList();....    
296d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
296e0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
296f0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
29700 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b  iguration.NoDesk
29710 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20  top)..          
29720 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29730 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
29740 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
29750 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
29760 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29770 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29780 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29790 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
297a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
297c0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
297d0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
297e0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
297f0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
29800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
29810 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
29820 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
29830 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
29840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29850 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29860 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
29870 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
29880 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
29890 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
298a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
298b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
298c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29900 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
29910 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
29920 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
29930 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
29950 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
29960 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ons = new Versio
29970 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nMap();....     
29980 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
29990 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
299a0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
299b0 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
299c0 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
299d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
299e0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
299f0 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56  ionList desktopV
29a00 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
29a10 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
29a20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29a30 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
29a40 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
29a50 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
29a60 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d  tion.NoNetFx20).
29a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a80 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
29a90 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
29aa0 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
29ab0 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20  , 50727));....  
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
29ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
29af0 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d  E: The .NET Fram
29b00 65 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e  ework 3.5 does n
29b10 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d  ot have its own.
29b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b30 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
29b40 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72  rectory; however
29b50 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68  , it still may h
29b60 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ave assembly..  
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b80 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65    //       folde
29b90 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69  rs for use in Vi
29ba0 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63  sual Studio, etc
29bb0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29bc0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29be0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
29bf0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
29c00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
29c10 65 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20 20  etFx35)..       
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c30 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
29c40 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
29c50 69 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a 20  ion(3, 5));.... 
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
29c80 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
29c90 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
29ca0 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20  .NoNetFx40)..   
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
29cd0 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20  ionList.Add(new 
29ce0 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30  Version(4, 0, 30
29cf0 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  319));....      
29d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
29d30 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
29d40 6b 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68  k 4.5 does not h
29d50 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20  ave its own..   
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74   //       direct
29d80 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74  ory; however, it
29d90 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20   still may have 
29da0 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29dc0 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66         folders f
29dd0 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c  or use in Visual
29de0 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20   Studio, etc... 
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e00 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29e10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
29e20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
29e30 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
29e40 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
29e50 34 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45)..           
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
29e70 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
29e80 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
29e90 34 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a  4, 5, 50709));..
29ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29eb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
29ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29ed0 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20   NOTE: The .NET 
29ee0 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 20  Framework 4.5.1 
29ef0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
29f00 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
29f10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
29f20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
29f30 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
29f40 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
29f50 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
29f60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
29f70 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
29f80 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
29f90 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
29fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29fc0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
29fd0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
29fe0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
29ff0 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d 0a  on.NoNetFx451)..
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a010 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2a020 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2a030 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
2a040 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   1));....       
2a050 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2a060 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
2a070 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61  ons.Add(".NETFra
2a080 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
2a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0a0 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e    desktopVersion
2a0b0 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  List);..        
2a0c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a0e0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2a0f0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2a100 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
2a110 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
2a120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2a140 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
2a150 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ions.Add(".NETCo
2a160 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c  mpactFramework",
2a170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a180 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
2a190 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65  rsionList(new Ve
2a1a0 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20  rsion[] {..     
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1c0 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32     new Version(2
2a1d0 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20  , 0, 0, 0), new 
2a1e0 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c  Version(3, 5, 0,
2a1f0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
2a200 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20           }));.. 
2a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a280 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2a290 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
2a2a0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2a2b0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2a2c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a2d0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2a2e0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
2a2f0 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  mNames = new Str
2a300 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a320 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2a330 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2a340 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
2a350 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
2a360 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2a370 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2a380 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c  rmNames.Add(null
2a390 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a3a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2a3b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2a3c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2a3d0 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a400 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2a410 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2a420 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 43  es.Add("PocketPC
2a430 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2a440 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2a450 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2a460 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 70  ames.Add("Smartp
2a470 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 20  hone");..       
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2a490 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2a4a0 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 69  ormNames.Add("Wi
2a4b0 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20  ndowsCE");..    
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2a4d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a4e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a4f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a540 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a550 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
2a560 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
2a570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2a580 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2a590 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2a5a0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2a5b0 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2a5c0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2a5d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a5e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2a5f0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2a600 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2a610 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2a620 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a630 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2a640 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2a650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a660 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2a670 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2a680 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65  ring installDire
2a690 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
2a6a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2a6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a6c0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2a6d0 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
2a6e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2a6f0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
2a700 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
2a710 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
2a720 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  e, perUser,..   
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
2a740 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2a750 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2a760 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2a770 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2a780 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2a7b0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2a7c0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2a7d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a7f0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a810 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a830 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
2a840 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
2a850 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
2a860 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a880 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
2a8a0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
2a8b0 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
2a8c0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2a8e0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  Key, frameworkVe
2a8f0 72 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20  rsion, perUser, 
2a900 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
2a930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a940 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
2a950 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
2a960 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2a970 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a980 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
2a990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a9a0 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
2a9b0 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a9f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2aa00 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2aa10 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2aa20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa30 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2aa40 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2aa50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2aa60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2aa70 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2aa80 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
2aa90 20 76 69 61 20 64 69 72 65 63 74 6f 72 79 20 7b   via directory {
2aaa0 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  1}.",..         
2aab0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2aac0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2aad0 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70  ersion), ForDisp
2aae0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
2aaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab00 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2ab10 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2ab20 20 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c           install
2ab30 44 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  Directory = dire
2ab40 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
2ab50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2ab60 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
2ab70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2ab80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2abd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2abe0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2abf0 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65   HaveFrameworkRe
2ac00 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
2ac10 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2ac20 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2ac30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2ac40 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
2ac50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2ac60 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2ac70 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2ac80 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
2ac90 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2aca0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2acb0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2acc0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2acd0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ace0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2acf0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2ad00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
2ad10 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2ad20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ad30 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
2ad40 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
2ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad60 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2ad70 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2ad80 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
2ad90 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2ada0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
2adb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2adc0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2add0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2ade0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2adf0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2ae10 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2ae20 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2ae30 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2ae40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ae50 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2ae60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ae80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2aea0 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
2aeb0 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
2aec0 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
2aed0 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
2aee0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2aef0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
2af00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2af10 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2af20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2af30 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
2af40 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2af50 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2af60 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2af70 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2af80 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
2af90 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
2afa0 66 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73 74  found via regist
2afb0 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20  ry {1}.",..     
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2afd0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2afe0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72  orkVersion), For
2aff0 44 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29  Display(keyName)
2b000 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2b010 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2b020 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2b030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b040 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2b050 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b060 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2b070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b0b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b0c0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
2b0d0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
2b0e0 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
2b0f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2b100 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46  ic bool ForEachF
2b110 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d  rameworkConfig(.
2b120 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2b130 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74  kRegistry regist
2b140 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
2b150 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2b160 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
2b170 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
2b180 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61  workConfigCallba
2b190 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
2b1a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b1b0 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54   version, /* NOT
2b1c0 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d  E: Optional. */.
2b1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2b1e0 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
2b1f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b200 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2b210 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b220 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2b230 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b240 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2b250 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2b260 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2b270 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2b280 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
2b290 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
2b2a0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b2c0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2b2d0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2b2e0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2b2f0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2b300 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2b310 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2b320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b330 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
2b340 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2b350 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
2b360 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2b370 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b380 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
2b390 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b3a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b3b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2b3c0 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
2b3d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2b3e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2b3f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b410 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2b420 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
2b430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b440 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b450 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
2b460 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20  ework list";..  
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b480 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2b490 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b4a0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2b4b0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2b4c0 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
2b4d0 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
2b4e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
2b4f0 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
2b500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b520 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2b530 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
2b540 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b550 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b570 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
2b580 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
2b590 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65  registry, rootKe
2b5a0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2b5b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b5c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
2b5d0 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
2b5e0 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
2b5f0 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
2b600 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b610 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b620 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b630 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2b640 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
2b650 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b670 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2b680 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
2b690 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
2b6a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b6b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2b6c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b6d0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2b6e0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2b6f0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2b700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b710 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b720 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
2b730 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
2b740 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b750 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b780 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2b790 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
2b7a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b7b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b7c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2b7d0 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
2b7e0 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b800 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b820 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2b830 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2b840 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
2b850 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
2b860 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
2b870 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b880 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2b890 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2b8a0 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
2b8b0 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
2b8c0 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
2b8e0 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
2b8f0 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
2b900 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2b910 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2b930 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2b940 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
2b950 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b960 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b970 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b990 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
2b9a0 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
2b9b0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2b9c0 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
2b9d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9f0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ba00 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
2ba10 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
2ba20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
2ba30 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
2ba40 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
2ba50 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2ba60 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
2ba70 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
2ba80 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
2ba90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2baa0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2bab0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2bac0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
2bad0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
2bae0 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
2baf0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2bb00 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
2bb10 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
2bb20 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
2bb30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
2bb40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2bb50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2bb60 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d  E: Skip all non-
2bb70 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72  desktop framewor
2bb80 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65 20  ks (i.e. if the 
2bb90 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..      
2bba0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2bbb0 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e     name is not n
2bbc0 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  ull)...         
2bbd0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2bbe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2bbf0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e  latformName != n
2bc00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2bc10 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2bc20 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2bc30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2bc40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2bc50 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70  TE: Grab the sup
2bc60 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20  ported versions 
2bc70 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c  of this particul
2bc80 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..            
2bc90 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61      //       fra
2bca0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
2bcb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
2bcd0 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f  sionList framewo
2bce0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a  rkVersionList;..
2bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd00 20 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d    if (version !=
2bd10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2bd20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bd40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2bd50 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2bd60 4d 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20  Manual override 
2bd70 6f 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61  of the *ONE* fra
2bd80 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a  mework version..
2bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bda0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
2bdb0 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...      
2bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bdd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bde0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56        frameworkV
2bdf0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77  ersionList = new
2be00 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2be10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
2be30 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2be40 77 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f  w Version(versio
2be50 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
2be60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2be70 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2be90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bea0 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65        if (!frame
2beb0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
2bec0 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  s.TryGetValue(..
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2bef0 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
2bf00 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2bf10 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf30 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69   (frameworkVersi
2bf40 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29  onList == null))
2bf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf80 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2bfb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2bfc0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2bfd0 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f  (Version framewo
2bfe0 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61  rkVersion in fra
2bff0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2c000 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2c010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c020 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2c030 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2c040 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2c050 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c070 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2c080 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2c090 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0b0 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
2c0c0 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
2c0d0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
2c0e0 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c100 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
2c110 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
2c120 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
2c130 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c140 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2c150 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2c160 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
2c190 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
2c1a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 20 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61      string insta
2c1d0 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  llDirectory = nu
2c1e0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2c1f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c200 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
2c210 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
2c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c230 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2c240 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2c250 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c270 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
2c280 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
2c290 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
2c2a0 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
2c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2c0 20 20 20 20 20 20 20 20 72 65 66 20 69 6e 73 74          ref inst
2c2d0 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a  allDirectory))..
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2c310 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2c320 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2c330 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
2c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c350 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2c360 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2c370 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2c380 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3a0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
2c3b0 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f  {0} directory no
2c3c0 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20  t found, " +..  
2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3e0 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
2c3f0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
2c400 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
2c410 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c430 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2c440 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2c480 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c490 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
2c4a0 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4c0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2c4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c4e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2c4f0 69 72 65 63 74 6f 72 79 20 3d 20 69 6e 73 74 61  irectory = insta
2c500 6c 6c 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  llDirectory;....
2c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c520 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
2c530 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
2c540 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2c560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c570 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2c580 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2c590 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2c5a0 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
2c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5c0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2c5d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2c5e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c600 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
2c610 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
2c620 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
2c630 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
2c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c650 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
2c660 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
2c670 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2c680 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2c6b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c6c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2c6d0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2c6e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c700 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
2c710 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
2c720 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
2c730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c740 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
2c750 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
2c760 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
2c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c790 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2c7a0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2c7b0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2c7c0 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7e0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2c7f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2c800 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c820 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
2c830 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
2c840 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
2c850 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
2c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c870 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
2c880 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
2c890 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2c8a0 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c8d0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
2c8e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2c8f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c900 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2c910 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2c920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c940 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2c950 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
2c960 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
2c970 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
2c980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c990 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
2c9a0 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
2c9b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2c9c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2c9f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2ca00 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2ca30 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2ca40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2ca50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca70 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2ca80 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
2ca90 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
2caa0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cac0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
2cad0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
2cae0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
2caf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2cb10 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
2cb20 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2cb30 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2cb50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2cb70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2cb80 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
2cb90 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
2cba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2cbb0 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
2cbc0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbe0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
2cbf0 61 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65  ariantName, name
2cc00 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  , description,..
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2cc30 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61  Name, assemblyNa
2cc40 6d 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  me, installDirec
2cc50 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc70 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70     clientData, p
2cc80 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 74  erUser, wow64, t
2cc90 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2ccc0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2ccd0 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66   localSaved, ref
2cce0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2cd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2cd20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2cd30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd50 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd80 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
2cd90 6c 53 61 76 65 64 20 26 26 20 21 73 61 76 65 64  lSaved && !saved
2cda0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2cdc0 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  aved = true;....
2cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cde0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
2cdf0 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce10 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2ce20 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2ce30 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2ce70 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2ce80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c                "l
2ceb0 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c  ocalSaved = {0},
2cec0 20 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a   saved = {1}",..
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cef0 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c  ForDisplay(local
2cf00 53 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c  Saved), ForDispl
2cf10 61 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20  ay(saved)),..   
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2cf40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2cf70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2cf80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2cf90 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
2cfa0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2cfb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d000 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2d010 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2d020 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2d030 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2d040 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2d050 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
2d060 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
2d070 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2d080 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
2d090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
2d0a0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
2d0b0 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
2d0c0 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
2d0d0 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
2d0e0 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
2d0f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d100 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45  version, /* NOTE
2d110 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a  : Optional. */..
2d120 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2d130 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2d140 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d150 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2d160 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2d170 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2d180 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2d190 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2d1a0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2d1c0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2d1d0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2d1e0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2d1f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2d210 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e  f (registry == n
2d220 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d230 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d240 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2d250 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b  valid registry";
2d260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d270 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2d290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d2a0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20   (frameworkList 
2d2b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d2c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d2d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d2e0 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
2d2f0 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20  ork list";..    
2d300 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d310 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2d320 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d330 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d340 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
2d350 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
2d360 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
2d370 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
2d380 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
2d390 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d3b0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
2d3c0 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
2d3d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d3e0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d3f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d400 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70        if (!IsSup
2d410 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65  portedRootKey(re
2d420 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29  gistry, rootKey)
2d430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d450 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20    error = "root 
2d460 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d  key must be per-
2d470 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68  user or per-mach
2d480 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ine";..         
2d490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2d4a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2d4b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2d4c0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2d4d0 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75  List.Names == nu
2d4e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d4f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d500 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
2d510 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20  framework names 
2d520 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
2d530 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d540 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d560 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2d570 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  rkList.Versions 
2d580 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d590 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d5a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d5b0 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76   "no framework v
2d5c0 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
2d5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d5e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d600 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d610 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
2d620 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
2d630 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d640 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d650 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2d660 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73  o platform names
2d670 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2d680 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d690 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2d6a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d6b0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2d6c0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
2d6d0 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b  unt != framework
2d6e0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2d6f0 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20  es.Count)..     
2d700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d710 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2d720 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2d730 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20  "framework name 
2d740 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e  count {0} does n
2d750 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  ot " +..        
2d760 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74              "mat
2d770 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  ch platform name
2d780 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61   count {1}", fra
2d790 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2d7a0 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20  .Count,..       
2d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2d7c0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2d7d0 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b  ormNames.Count);
2d7e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d7f0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d800 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d820 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
2d830 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d   0; index < fram
2d840 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
2d850 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d  Count; index++).
2d860 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d880 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2d890 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
2d8a0 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  b the name of th
2d8b0 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67  e framework (e.g
2d8c0 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  . ".NETFramework
2d8d0 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ")..            
2d8e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
2d8f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2d900 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20   platform (e.g. 
2d910 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20  "WindowsCE")... 
2d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d930 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2d940 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
2d950 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  orkName = framew
2d960 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e  orkList.Names[in
2d970 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex];..         
2d980 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2d990 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61  atformName = fra
2d9a0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2d9b0 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  ormNames[index];
2d9c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d9d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2d9e0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d9f0 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
2da00 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
2da10 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
2da20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da30 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
2da40 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
2da50 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2da60 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2da70 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
2da80 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2daa0 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75  f (version != nu
2dab0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2dac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daf0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e      // NOTE: Man
2db00 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20  ual override of 
2db10 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77  the *ONE* framew
2db20 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ork version..   
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db40 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f   //       to pro
2db50 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
2db60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db80 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
2db90 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
2dba0 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20  rsionList();..  
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
2dbd0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2dbe0 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29  ersion(version))
2dbf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2dc00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2dc10 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc40 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
2dc50 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
2dc60 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2dc90 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
2dca0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2dcb0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
2dcd0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2dce0 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
2dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2dd20 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2dd60 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
2dd70 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2dd80 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
2dd90 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
2dda0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ddb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ddc0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2ddd0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2dde0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2ddf0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2de00 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2de10 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2de20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2de30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de50 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d     "frameworkNam
2de60 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f  e = {0}, framewo
2de70 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c  rkVersion = {1},
2de80 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
2dea0 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32  latformName = {2
2deb0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  }", ForDisplay(f
2dec0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a  rameworkName),..
2ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dee0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2def0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
2df00 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
2df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2df20 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f  orDisplay(platfo
2df30 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  rmName)), traceC
2df40 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df60 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77   if (!HaveFramew
2df70 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  orkRegistry(..  
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df90 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2dfa0 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
2dfb0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2dfc0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfe0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
2dff0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
2e000 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e020 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2e050 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2e060 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e080 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2e090 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2e0a0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2e0b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0d0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2e0e0 6b 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20 6e  k {0} registry n
2e0f0 6f 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20  ot found, " +.. 
2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e110 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
2e120 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
2e130 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2e140 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e160 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2e170 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e190 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e1c0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c           if (cal
2e1d0 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1f0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2e200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e210 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
2e220 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
2e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e240 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
2e250 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
2e260 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e280 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
2e290 66 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20  formName, null, 
2e2a0 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55  clientData, perU
2e2b0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e    wow64, throwOn
2e2e0 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
2e2f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
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 72 65 66 20 65 72 72 6f 72         ref error
2e320 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e370 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e380 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e390 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e3a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e3b0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2e3c0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2e3d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e420 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e430 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
2e440 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
2e450 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
2e460 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2e470 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
2e480 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
2e490 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2e4a0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2e4b0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e4c0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
2e4d0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
2e4e0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73            ref Vs
2e4f0 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20  List vsList..   
2e500 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2e510 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e520 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
2e530 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e540 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d          vsList =
2e550 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a   new VsList();..
2e560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2e570 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79   (vsList.RootKey
2e580 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e590 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2e5a0 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
2e5b0 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
2e5c0 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
2e5d0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
2e5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e600 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
2e610 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
2e620 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
2e630 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e640 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e650 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e660 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29  ration.NoVs2005)
2e670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e680 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e690 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e6a0 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f  rsion(8, 0)); //
2e6b0 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
2e6c0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e6d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e6e0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e6f0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
2e700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e710 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e720 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e730 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
2e740 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20   2008....       
2e750 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e760 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e770 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e780 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29  ration.NoVs2010)
2e790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e7a0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e7b0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e7c0 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f  rsion(10, 0));//
2e7d0 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20   2010....       
2e7e0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e7f0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e800 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e810 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29  ration.NoVs2012)
2e820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e830 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e840 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e850 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f  rsion(11, 0));//
2e860 20 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20 20   2012....       
2e870 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2e880 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2e890 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2e8a0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33 29  ration.NoVs2013)
2e8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e8c0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
2e8d0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
2e8e0 72 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f 2f  rsion(12, 0));//
2e8f0 20 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20   2013..         
2e900 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2e910 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2e920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e960 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2e970 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2e980 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44  l HaveVsVersionD
2e990 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
2e9a0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2e9b0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2e9c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2e9d0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
2e9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2e9f0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
2ea00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2ea10 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2ea20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2ea30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2ea40 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2ea50 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2ea60 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2ea70 20 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73    ref string ins
2ea80 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20  tallDirectory.. 
2ea90 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2eaa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2eab0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2eac0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2eae0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2eaf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2eb00 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2eb10 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2eb20 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
2eb30 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
2eb40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2eb50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2eb60 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2eb70 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2eb80 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2eb90 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2eba0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2ebb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ebc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ebd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ebe0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2ebf0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ec00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ec10 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2ec20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2ec30 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
2ec40 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
2ec50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ec60 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
2ec70 74 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20  tallDir", null, 
2ec80 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2ec90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2eca0 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
2ecb0 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ece0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ecf0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
2ed00 6f 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61  ory = (string)va
2ed10 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
2ed20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
2ed30 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2ed40 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2ed70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ed80 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
2ed90 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
2eda0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2edb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2edc0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2edd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2ede0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2edf0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2ee00 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2ee20 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2ee30 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2ee40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
2ee60 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d  isual Studio {0}
2ee70 20 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74   found in direct
2ee80 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20  ory {1}.",..    
2ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eea0 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
2eeb0 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61  sion), ForDispla
2eec0 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a  y(directory)),..
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eee0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2eef0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2ef00 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44 69         installDi
2ef10 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
2ef20 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
2ef30 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2ef40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2ef50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2ef60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2efb0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2efc0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2efd0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2efe0 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2eff0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2f000 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73  ol ForEachVsVers
2f010 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ionRegistry(..  
2f020 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2f030 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
2f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 73  ..            Vs
2f050 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20  List vsList,..  
2f060 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c            Visual
2f070 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61  StudioRegistryCa
2f080 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
2f090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2f0a0 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2f0b0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2f0c0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2f0d0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2f0e0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2f0f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2f100 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2f110 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2f120 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2f130 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2f140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2f150 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2f160 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2f170 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2f180 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2f190 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2f1a0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2f1b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2f1c0 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29  egistry == null)
2f1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1f0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2f200 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20  d registry";..  
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f220 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f230 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f240 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2f250 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
2f260 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2f280 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2f290 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  S list";..      
2f2a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f2b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2f2c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f2d0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2f2e0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
2f2f0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  vsList.RootKey;.
2f300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2f310 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
2f320 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2f330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f340 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2f350 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
2f360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f370 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f380 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f390 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2f3a0 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
2f3b0 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
2f3c0 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
2f3d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f3e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2f3f0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
2f400 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
2f410 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
2f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f430 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f440 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f450 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2f460 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
2f470 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2f480 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f490 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2f4a0 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66  no VS versions f
2f4b0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
2f4c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f4d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f4e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f4f0 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
2f500 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69  sion vsVersion i
2f510 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e  n vsList.Version
2f520 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
2f530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f540 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2f550 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2f560 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f580 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2f590 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2f5a0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2f5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f5c0 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e        "vsVersion
2f5d0 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
2f5e0 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c  lay(vsVersion)),
2f5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f600 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2f610 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2f620 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f630 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2f640 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
2f650 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f660 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44 69  !HaveVsVersionDi
2f670 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
2f680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f690 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2f6a0 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
2f6b0 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
2f6c0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2f6e0 65 72 62 6f 73 65 2c 20 72 65 66 20 69 6e 73 74  erbose, ref inst
2f6f0 61 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a  allDirectory))..
2f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f710 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2f720 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2f730 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
2f740 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
2f750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f760 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2f770 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2f780 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2f790 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7b0 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b  "Visual Studio {
2f7c0 30 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  0} not found, sk
2f7d0 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2f800 76 73 56 65 72 73 69 6f 6e 29 29 2c 20 74 72 61  vsVersion)), tra
2f810 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f860 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
2f870 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2f890 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f8b0 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8d0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2f8e0 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
2f8f0 70 61 63 6b 61 67 65 2c 20 69 6e 73 74 61 6c 6c  package, install
2f900 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  Directory,..    
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f920 20 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20      clientData, 
2f930 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
2f940 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
2f950 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f970 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2f980 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
2f990 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f9b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2f9f0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2fa00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2fa10 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2fa20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2fa70 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
2fa80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c  onfiguration Fil
2fa90 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
2faa0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2fab0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2fac0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2fad0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2fae0 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44  static bool AddD
2faf0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2fb00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
2fb10 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
2fb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2fb30 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  ing invariantNam
2fb40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fb50 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2fb60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2fb70 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2fb80 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2fb90 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2fba0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2fbb0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2fbc0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2fbd0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2fbe0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fbf0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2fc00 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2fc10 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2fc20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2fc30 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2fc40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2fc50 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fc60 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2fc70 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2fc80 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2fc90 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2fca0 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2fcb0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2fcc0 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2fcd0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2fce0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2fcf0 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2fd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2fd10 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2fd20 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2fd30 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2fd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd50 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2fd60 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2fd70 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  nt, invariantNam
2fd80 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  e)) as XmlElemen
2fd90 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2fda0 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
2fdb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2fdc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fdd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2fde0 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20  [] elementNames 
2fdf0 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
2fe00 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
2fe10 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69  .data", "DbProvi
2fe20 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20  derFactories".. 
2fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fe40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2fe50 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2fe60 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
2fe70 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2fe80 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
2fe90 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b  DocumentElement;
2fea0 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   /* configuratio
2feb0 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n */....        
2fec0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
2fed0 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e  (string elementN
2fee0 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61  ame in elementNa
2fef0 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mes)..          
2ff00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2ff20 45 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f  Element = previo
2ff30 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74  usElement.Select
2ff40 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff60 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65       elementName
2ff70 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
2ff80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ff90 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
2ffa0 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d  lement == null).
2ffb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ffc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2fff0 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
30000 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
30010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30020 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53    elementName, S
30030 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
30040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30050 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
30060 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
30070 68 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29  hild(addElement)
30080 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30090 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
300a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300b0 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
300c0 3d 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20  = addElement;.. 
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
300e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
300f0 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d      addElement =
30100 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65   document.Create
30110 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20  Element(..      
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61                "a
30130 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  dd", String.Empt
30140 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
30150 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
30160 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69  lement.AppendChi
30170 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d  ld(addElement);.
30180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30190 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
301a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
301b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
301c0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
301d0 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
301e0 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22  Attribute("name"
301f0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
30200 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74          name, St
30210 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
30220 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
30230 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30240 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
30250 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65  ent.SetAttribute
30260 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d  ("name", name);.
30270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30280 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
30290 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
302a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
302b0 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
302c0 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74  addElement.GetAt
302d0 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
302e0 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt"),..         
302f0 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72             invar
30300 69 61 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67  iantName, String
30310 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
30320 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
30330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30340 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
30350 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e  SetAttribute("in
30360 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69  variant", invari
30370 61 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  antName);..     
30380 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
30390 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
303a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
303b0 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
303c0 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65  ng.Equals(addEle
303d0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
303e0 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29  e("description")
303f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
30400 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69         descripti
30410 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  on, StringCompar
30420 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
30430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
30450 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74  ddElement.SetAtt
30460 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74  ribute("descript
30470 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69 6f  ion", descriptio
30480 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
30490 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75       dirty = tru
304a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
304b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
304c0 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70 65   string fullType
304d0 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f  Name = String.Fo
304e0 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c  rmat("{0}, {1}",
304f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30500 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73 65    typeName, asse
30510 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  mblyName);....  
30520 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
30530 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
30540 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
30550 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20  bute("type"),.. 
30560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30570 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c     fullTypeName,
30580 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
30590 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
305a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
305b0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
305c0 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
305d0 75 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c  ute("type", full
305e0 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  TypeName);..    
305f0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
30600 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
30610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30620 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74          if (dirt
30630 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20  y || whatIf)..  
30640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
30660 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
30680 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
30690 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
306a0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306c0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
306d0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
306e0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
306f0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
30700 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64              "add
30710 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20  Element = {0}", 
30720 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c  ForDisplay(addEl
30730 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20  ement)),..      
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30750 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
30760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30770 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
30780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30790 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
307a0 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Save(fileName);.
307b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
307c0 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64     filesModified
307d0 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
307e0 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
307f0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
30800 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30810 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
30820 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
30830 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30880 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
30890 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
308a0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
308b0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
308c0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
308d0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
308e0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
308f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
30900 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
30910 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
30920 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20  riantName,..    
30930 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
30940 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
30950 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
30960 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
30970 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
30980 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30990 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
309a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
309b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
309c0 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
309d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
309e0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
309f0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
30a00 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
30a10 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
30a20 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
30a30 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
30a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
30a50 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
30a60 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
30a70 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
30a80 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
30a90 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
30aa0 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
30ab0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
30ac0 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
30ad0 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
30ae0 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d  iantName)) as Xm
30af0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
30b00 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
30b10 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  Element != null)
30b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b40 20 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65   addElement.Pare
30b50 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69  ntNode.RemoveChi
30b60 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d  ld(addElement);.
30b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30b80 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
30b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
30bb0 45 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c  Element removeEl
30bc0 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
30bd0 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
30be0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
30bf0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
30c00 74 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65  t(XPathForRemove
30c10 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61  Element, invaria
30c20 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c 45  ntName)) as XmlE
30c30 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
30c40 20 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76         if (remov
30c50 65 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  eElement != null
30c60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30c80 20 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e    removeElement.
30c90 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76  ParentNode.Remov
30ca0 65 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65  eChild(removeEle
30cb0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
30cc0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
30cd0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
30ce0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30cf0 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c      if (dirty ||
30d00 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
30d10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30d20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
30d30 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
30d40 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
30d50 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
30d60 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
30d70 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
30d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d90 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
30da0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
30db0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 20 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d          "addElem
30de0 65 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76  ent = {0}, remov
30df0 65 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c  eElement = {1}",
30e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30e10 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
30e20 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29  play(addElement)
30e30 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d  , ForDisplay(rem
30e40 6f 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  oveElement)),.. 
30e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
30e70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30e80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
30e90 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
30ea0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
30eb0 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
30ec0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
30ed0 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64          filesMod
30ee0 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  ified++;....    
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
30f00 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
30f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30f20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
30f30 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
30f40 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
30f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
30fa0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
30fb0 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69  l ProcessDbProvi
30fc0 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
30fd0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
30fe0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
30ff0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
31000 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20  variantName,..  
31010 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31020 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
31030 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72      string descr
31040 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
31050 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
31060 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
31070 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
31080 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
31090 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
310a0 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
310b0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
310c0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
310d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
310e0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
310f0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
31100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31110 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
31120 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
31130 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
31140 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
31150 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
31160 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
31170 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
31180 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
31190 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
311a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
311b0 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
311c0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
311d0 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
311e0 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
311f0 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
31200 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
31210 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
31220 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31240 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
31250 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63  amework config c
31260 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31280 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
312a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
312b0 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
312c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
312d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
312e0 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
312f0 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
31310 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
31320 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
31330 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64  rbose, ref saved
31340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31350 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
31360 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
31370 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69        AddDbProvi
31380 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
31390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313a0 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72   fileName, invar
313b0 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c 20  iantName, name, 
313c0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
313d0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
313e0 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
313f0 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  mblyName, whatIf
31400 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
31410 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
31420 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
31440 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
31450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31460 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
31470 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
31480 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
31490 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
314a0 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , invariantName,
314b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
314c0 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314e0 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
314f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
31500 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31510 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
31520 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31570 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
31580 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65  n Assembly Folde
31590 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rs Handling..   
315a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
315b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
315c0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
315d0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
315e0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
315f0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
31600 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
31610 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
31620 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31630 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
31640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31650 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
31660 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
31670 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
31680 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
31690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
316a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
316b0 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69 73 74  OTE: This regist
316c0 72 79 20 6b 65 79 20 61 70 70 65 61 72 73 20 74  ry key appears t
316d0 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d 62  o always be 32-b
316e0 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  it only..       
316f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 69       //       (i
31700 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65 63  .e. probably bec
31710 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79 20  ause it is only 
31720 75 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d 0a  used by Visual..
31730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31740 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68 69       Studio, whi
31750 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  ch is currently 
31760 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f 6e  always 32-bit on
31770 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ly)...          
31780 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
31790 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
317a0 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
317b0 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
317c0 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
317d0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
317e0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
317f0 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62  {2}\\{3}\\Assemb
31800 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a  lyFoldersEx" :..
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31820 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
31830 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65  \{1}\\v{2}\\Asse
31840 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d  mblyFoldersEx";.
31850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
31860 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
31870 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
31880 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73  ootKeyName(perUs
31890 65 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20  er, wow64),..   
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
318b0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
318c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
318d0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
318e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
318f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
31940 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
31950 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41  atic bool AddToA
31960 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
31970 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
31980 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
31990 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
319a0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
319b0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
319c0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
319d0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
319e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
319f0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
31a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
31a10 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
31a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
31a30 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c  tring directory,
31a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
31a50 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
31a60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
31a70 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
31a80 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
31a90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31aa0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
31ab0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
31ac0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
31ad0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
31ae0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
31af0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
31b00 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  GetAssemblyFolde
31b10 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rsKeyName(..    
31b20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
31b30 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
31b40 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
31b50 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73  tformName, perUs
31b60 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
31b70 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a       wow64);....
31b80 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31b90 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31ba0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
31bb0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
31bc0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
31bd0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
31be0 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c  , keyName, true,
31bf0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31c00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
31c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31c20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
31c30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31c40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31c50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
31c60 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
31c70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
31c80 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
31c90 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
31ca0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
31cb0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
31cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
31cd0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
31ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31cf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
31d00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
31d10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31d20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
31d30 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
31d40 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
31d50 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31d60 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
31d90 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
31da0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
31db0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31dd0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
31de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31df0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e10 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
31e20 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e40 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31e50 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
31e60 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
31e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31e90 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  , subKeyName);..
31ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31ec0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31ef0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
31f00 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
31f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
31f30 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
31f40 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31f50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
31f60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
31f80 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
31f90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
31fa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31ff0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
32000 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
32010 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
32020 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
32030 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
32040 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
32050 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
32060 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
32070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
32080 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
32090 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
320a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
320b0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
320c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
320d0 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
320e0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
320f0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
32100 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
32110 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32120 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
32130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32140 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
32150 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
32160 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
32170 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
32180 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
32190 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
321a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
321b0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
321c0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
321d0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
321e0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
321f0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
32200 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
32210 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d  mName, perUser,.
32220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32230 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
32240 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
32250 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
32260 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
32270 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
32280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32290 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
322a0 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
322b0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
322c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
322e0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
322f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32310 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32320 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32340 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
32350 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
32360 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
32370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32380 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32390 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
323c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
323d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
323e0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
323f0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
32400 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
32410 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
32420 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
32430 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
32440 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
32450 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32460 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32470 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
32480 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
324d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
324e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
324f0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
32500 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
32510 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
32520 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
32530 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
32540 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
32550 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
32560 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
32570 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
32580 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32590 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
325a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
325b0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
325c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
325d0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
325e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
325f0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
32600 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
32610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32620 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
32630 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
32640 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
32650 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32660 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
32670 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
32680 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
32690 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
326a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
326b0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
326c0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
326d0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
326e0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
326f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
32700 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
32710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
32720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32730 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
32740 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c  d framework call
32750 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32770 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32780 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32790 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
327a0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
327b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
327c0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
327d0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
327e0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
327f0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
32800 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
32810 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
32820 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
32830 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
32840 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50           LegacyP
32850 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72 55  rojectName, perU
32860 73 65 72 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73  ser, wow64, fals
32870 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
32880 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
32890 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
328a0 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  or) &&..        
328b0 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73 73          AddToAss
328c0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
328f0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
32900 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
32910 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69  ProjectName, pai
32940 72 2e 58 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  r.X, perUser, wo
32950 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
32960 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
32970 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
32980 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
32990 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
329a0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
329b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
329c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
329d0 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
329e0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
329f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32a00 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
32a10 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
32a20 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
32a30 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
32a40 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a              Proj
32a50 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ectName, perUser
32a60 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
32a70 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c  Missing, whatIf,
32a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a90 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
32aa0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
32ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32ac0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
32ad0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
32ae0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
32af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
32b30 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
32b40 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e  isual Studio Han
32b50 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
32b60 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
32b70 72 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65  ring GetVsRootKe
32b80 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
32b90 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
32ba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32bb0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
32bc0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
32bd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32be0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
32bf0 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72  ormat("{0}\\Micr
32c00 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75  osoft\\VisualStu
32c10 64 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  dio",..         
32c20 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
32c30 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
32c40 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20  ow64));..       
32c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32ca0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32cb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
32cc0 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e  string GetVsKeyN
32cd0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
32ce0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
32cf0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
32d00 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
32d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32d20 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
32d30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
32d40 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
32d50 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
32d60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
32d70 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
32d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
32d90 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
32da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
32db0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
32dc0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
32dd0 20 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b        "{0}\\{1}{
32de0 32 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65  2}", GetVsRootKe
32df0 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
32e00 6f 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e  ow64), vsVersion
32e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32e20 20 20 20 73 75 66 66 69 78 29 3b 0d 0a 20 20 20     suffix);..   
32e30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32e40 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32e90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
32ea0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
32eb0 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d  Source Handling.
32ec0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
32ed0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
32ee0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
32ef0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
32f00 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
32f10 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
32f20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
32f30 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
32f40 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
32f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
32f60 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
32f70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32f80 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
32f90 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
32fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32fb0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
32fc0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
32fd0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
32fe0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
32ff0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
33000 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
33010 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33020 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
33030 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33050 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
33060 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
33070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33080 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
330a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
330b0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
330c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
330d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
330e0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
330f0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
33100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33110 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
33140 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
33150 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
33160 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
33170 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
33180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
33190 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
331a0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
331b0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
331c0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
331d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
331e0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
331f0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
33200 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
33210 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33220 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
33230 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33240 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33260 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
33270 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33290 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
332a0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
332b0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
332e0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
332f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33300 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
33310 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33330 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33340 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
33350 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
33360 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33380 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
33390 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
333a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
333b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
333c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
333d0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
333e0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
333f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33410 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
33420 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
33430 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33450 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
33460 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
33470 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
33480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
334a0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
334b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
334c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
334d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
334f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
33500 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
33510 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
33520 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
33530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
33540 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
33550 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
33560 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
33590 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
335a0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
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 20 77 68 61 74 49 66 2c 20          whatIf, 
335d0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
335e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
335f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33600 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
33610 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e  taSourceKey == n
33620 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
33630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33650 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
33660 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
33670 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
336a0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
336b0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20  key: {0}\\{1}", 
336c0 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
336d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336e0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
336f0 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
33700 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
33710 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33730 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33750 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33770 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
33780 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
33790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337a0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
337b0 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20  ourceKey, null, 
337c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
337d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337e0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
337f0 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c   Database File",
33800 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
33810 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
33840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33850 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
33860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33870 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
33880 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20  is value is new 
33890 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d  as of 1.0.83.0..
338a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
338b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338d0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
338e0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33900 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
33910 6f 75 72 63 65 4b 65 79 2c 20 22 44 65 66 61 75  ourceKey, "Defau
33920 6c 74 50 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20  ltProvider",..  
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
33950 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
33960 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
33970 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
33980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33990 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
339a0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
339b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
339d0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
339e0 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20  aSourceKey,..   
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a00 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
33a10 46 6f 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69  Format("Supporti
33a20 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d  ngProviders\\{0}
33a30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a50 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
33a60 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28  iderId.ToString(
33a70 56 73 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  VsIdFormat)),.. 
33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a90 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
33aa0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
33ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
33ae0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33af0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
33b00 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
33b10 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
33b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
33b60 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
33b70 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
33b80 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63  emoveVsDataSourc
33b90 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33ba0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
33bb0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
33bc0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
33bd0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
33be0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
33bf0 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
33c00 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
33c10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33c20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
33c30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33c40 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
33c50 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
33c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
33c70 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
33c80 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
33c90 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
33ca0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
33cb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33cc0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
33cd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33cf0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33d00 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
33d10 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
33d20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33d30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33d40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33d50 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
33d60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33d70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33d80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33d90 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
33da0 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
33db0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
33dc0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
33dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33de0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
33df0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
33e00 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
33e10 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
33e20 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
33e30 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
33e40 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
33e50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
33e60 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
33e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e80 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
33e90 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
33ea0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
33eb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33ed0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
33ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
33f10 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f30 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
33f40 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
33f50 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
33f80 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
33f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fa0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33fd0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
33fe0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
33ff0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
34000 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
34010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34020 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
34030 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75  ataSources", tru
34040 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
34050 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
34060 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34070 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34080 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
34090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
340a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
340b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340c0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
340d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
340e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340f0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34100 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34110 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72  y: {0}\\DataSour
34120 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
34130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34140 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
34150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34160 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
34170 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34180 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341a0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
341b0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
341c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341d0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
341e0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f  , package.DataSo
341f0 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
34200 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
34210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34220 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
34230 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
34240 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
34250 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
34260 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34270 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
34280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
34290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
342d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
342e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
342f0 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
34300 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
34310 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
34320 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
34330 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
34340 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
34350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34360 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
34370 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
34380 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
34390 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
343a0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
343b0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
343c0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
343d0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
343e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
343f0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
34400 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
34410 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
34420 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
34430 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
34440 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
34450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
34460 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
34470 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
34480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34490 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
344a0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
344b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
344c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
344d0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
344e0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
344f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
34500 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
34510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34520 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
34530 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
34540 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
34550 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
34560 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
34570 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
34580 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34590 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
345a0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
345b0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
345c0 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
345e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
345f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
34600 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
34610 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
34620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34630 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
34640 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
34650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34660 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
34670 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
34680 70 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72  package, perUser
34690 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
346a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
346b0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
346c0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
346d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
346e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
346f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34700 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34710 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  rn RemoveVsDataS
34720 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
34730 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
34740 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
34750 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
34760 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
34770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34780 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
34790 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
347a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
347b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
347c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
347d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
347e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
347f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34820 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
34830 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
34840 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64  udio Data Provid
34850 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  er Handling..   
34860 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
34870 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61  tic bool AddVsDa
34880 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
34890 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
348a0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
348b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
348c0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
348d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
348e0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
348f0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
34900 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
34910 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
34920 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
34930 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
34940 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
34950 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
34960 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34970 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34980 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
34990 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
349a0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
349b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
349c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
349d0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
349e0 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
349f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34a10 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34a20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
34a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34a40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34a50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34a60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34a70 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
34a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34aa0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34ab0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
34ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34ad0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34af0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34b00 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
34b10 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
34b20 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
34b30 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
34b40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34b50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34b60 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34b70 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
34b80 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34b90 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
34ba0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
34bb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34bc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
34bd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34be0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
34bf0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34c00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34c10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34c20 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
34c30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
34c40 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
34c50 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
34c60 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
34c70 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
34c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
34c90 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
34ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34cb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
34cc0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
34cd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34cf0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34d00 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34d10 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34d20 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d40 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
34d50 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
34d60 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d90 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
34da0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
34db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
34dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34dd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
34de0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
34df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
34e10 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
34e20 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
34e30 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
34e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34e60 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
34e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34e80 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34eb0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34ec0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34ed0 79 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y dataProviderKe
34ee0 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y =..           
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
34f10 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
34f20 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
34f50 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
34f60 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f80 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
34f90 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34fd0 20 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65   (dataProviderKe
34fe0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35020 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
35030 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35050 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
35060 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
35070 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
35080 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
35090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350a0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
350b0 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
350c0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
350d0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
350e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35100 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
35110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35120 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
35140 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
35150 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
35160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35170 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
35180 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69  ey, null, Descri
35190 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a  ption, whatIf,..
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
351c0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
351d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
351f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35200 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65  NOTE: This value
35210 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e   is new as of 1.
35220 30 2e 38 33 2e 30 2e 20 20 48 6f 77 65 76 65 72  0.83.0.  However
35230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35250 20 20 20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e      it should on
35260 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
35270 20 70 61 63 6b 61 67 65 20 61 73 73 65 6d 62 6c   package assembl
35280 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
35290 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
352a0 20 20 20 20 61 6e 64 20 61 6c 6c 20 74 68 65 20      and all the 
352b0 61 73 73 65 6d 62 6c 69 65 73 20 69 74 20 72 65  assemblies it re
352c0 66 65 72 73 20 74 6f 20 61 72 65 20 62 65 69 6e  fers to are bein
352d0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
352e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
352f0 20 20 20 20 70 6c 61 63 65 64 20 69 6e 74 6f 20      placed into 
35300 74 68 65 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d  the global assem
35310 62 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20  bly cache...    
35320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35330 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 69 66 20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62  if (package.Glob
35360 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29  alAssemblyCache)
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 7b 0d 0a 20 20 20            {..   
35390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353a0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
353b0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
353c0 28 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 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
353f0 65 79 2c 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d  ey, "Assembly",.
35400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35420 20 70 61 63 6b 61 67 65 2e 44 65 73 69 67 6e 65   package.Designe
35430 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f  rAssemblyName.To
35440 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20  String(),..     
35450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35460 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
35470 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
35480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35490 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
354a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
354d0 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c  / NOTE: This val
354e0 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20  ue is new as of 
354f0 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20  1.0.83.0...     
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35510 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
35520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
35530 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
35540 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35560 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
35570 72 4b 65 79 2c 20 22 41 73 73 6f 63 69 61 74 65  rKey, "Associate
35580 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20 20  dSource",..     
35590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
355b0 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
355c0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
355d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
355e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
355f0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
35600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35610 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
35620 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
35630 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
35640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35650 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
35660 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d  y, "InvariantNam
35670 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
35680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35690 20 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64 65   package.Provide
356a0 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20  rInvariantName, 
356b0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
356c0 3b 0d 0a 0d 0a 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 52 65 67               Reg
356e0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
356f0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
35720 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22  ey, "Technology"
35730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
35750 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63  ackage.AdoNetTec
35760 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69  hnologyId.ToStri
35770 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
35780 0a 20 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 77 68 61               wha
357a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
357b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
357c0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
357d0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
357e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
35810 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c   "CodeBase", fil
35820 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a  eName, whatIf,..
35830 20 20 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 20 20 76 65 72 62              verb
35850 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
35860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35870 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35880 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
35890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358a0 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
358b0 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79  derKey, "Factory
358c0 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20  Service",..     
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358e0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
358f0 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
35900 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
35910 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
35920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35930 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
35940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35950 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
35960 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
35970 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
35980 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359a0 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
359b0 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63  ects\\DataConnec
359c0 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d  tionUIControl",.
359d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
359e0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
359f0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
35a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a10 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
35a20 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
35a30 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
35a40 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
35a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a60 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
35a70 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
35a80 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22  ctionProperties"
35a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
35ab0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
35ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35ad0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
35ae0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
35af0 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
35b00 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
35b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
35b30 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
35b40 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c  nectionSupport",
35b50 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
35b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b70 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
35b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35b90 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
35ba0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
35bb0 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
35bc0 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
35bf0 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65  bjects\\DataObje
35c00 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  ctSupport", what
35c10 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c30 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
35c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c50 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
35c60 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
35c70 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
35c80 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
35c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ca0 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
35cb0 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70 6f  s\\DataViewSuppo
35cc0 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
35cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ce0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
35cf0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
35d00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35d10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
35d20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35d30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35d40 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
35d50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
35d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35da0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35db0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
35dc0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61   bool RemoveVsDa
35dd0 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
35de0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
35df0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
35e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
35e10 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
35e20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
35e30 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
35e40 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
35e50 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
35e60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
35e70 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
35e80 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
35e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
35ea0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
35eb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
35ec0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
35ed0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
35ee0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
35ef0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
35f10 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
35f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
35f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35f40 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
35f50 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
35f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
35f80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
35f90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
35fa0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
35fb0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
35fc0 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
35fd0 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d  User, wow64);...
35fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
35ff0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
36000 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
36010 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
36020 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
36030 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
36040 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
36050 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
36060 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
36070 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36080 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
36090 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
360a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
360b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
360c0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
360d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
360f0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
36100 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
36110 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
36140 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
36150 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36160 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
36170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
36190 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
361a0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
361b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
361c0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
361d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361e0 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
361f0 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
36200 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
36210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36230 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
36240 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36260 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36270 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
36280 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
36290 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362b0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
362c0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
362d0 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
362e0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
362f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36300 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
36310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36320 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
36350 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
36360 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
36370 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
36380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36390 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
363a0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
363b0 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
363c0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363e0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
363f0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
36400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36410 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
36430 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
36440 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
36450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36490 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
364a0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
364b0 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
364c0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
364d0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
364e0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
364f0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
36500 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
36510 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36520 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
36530 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
36540 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
36550 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
36560 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
36570 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
36580 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
36590 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
365a0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
365b0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
365c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
365d0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
365e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
365f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
36600 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
36610 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36620 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
36630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
36640 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
36650 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
36660 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
36670 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
36680 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
36690 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
366a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
366b0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
366c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
366d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
366e0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
366f0 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36720 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36730 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36740 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
36750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36760 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
36770 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
36780 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36790 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
367a0 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
367b0 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72  x, package, pair
367c0 2e 58 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  .X, perUser,..  
367d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367e0 20 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c    wow64, whatIf,
367f0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
36800 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
36810 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36820 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
36830 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36840 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
36850 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64  moveVsDataProvid
36860 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
36870 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
36880 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
36890 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65  fix, package, pe
368a0 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20  rUser, wow64,.. 
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
368d0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
368e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
368f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36900 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
36910 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
36970 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
36980 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69  o Package Handli
36990 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
369a0 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
369b0 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b  InitializeVsPack
369c0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
369d0 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67 49    string configI
369e0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
369f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
36a00 67 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  g providerInvari
36a10 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  antName,..      
36a20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 61 63        string fac
36a30 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20  toryTypeName,.. 
36a40 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
36a50 62 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72  blyName provider
36a60 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  AssemblyName,.. 
36a70 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
36a80 62 6c 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72  blyName designer
36a90 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  AssemblyName,.. 
36aa0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
36ab0 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
36ac0 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  che,..          
36ad0 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61    ref Package pa
36ae0 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
36af0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
36b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
36b10 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
36b20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36b40 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20    package = new 
36b50 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20  Package();....  
36b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
36b70 63 6b 61 67 65 2e 43 6f 6e 66 69 67 49 6e 76 61  ckage.ConfigInva
36b80 72 69 61 6e 74 4e 61 6d 65 20 3d 20 63 6f 6e 66  riantName = conf
36b90 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b  igInvariantName;
36ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36bb0 20 20 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64    package.Provid
36bc0 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20  erInvariantName 
36bd0 3d 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69  = providerInvari
36be0 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  antName;..      
36bf0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
36c00 65 2e 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d  e.FactoryTypeNam
36c10 65 20 3d 20 66 61 63 74 6f 72 79 54 79 70 65 4e  e = factoryTypeN
36c20 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
36c30 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 72        package.Pr
36c40 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
36c50 6d 65 20 3d 20 70 72 6f 76 69 64 65 72 41 73 73  me = providerAss
36c60 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
36c70 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
36c80 61 67 65 2e 44 65 73 69 67 6e 65 72 41 73 73 65  age.DesignerAsse
36c90 6d 62 6c 79 4e 61 6d 65 20 3d 20 64 65 73 69 67  mblyName = desig
36ca0 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  nerAssemblyName;
36cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36cc0 20 20 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c    package.Global
36cd0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
36ce0 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
36cf0 63 68 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  che;....        
36d00 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
36d10 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79  AdoNetTechnology
36d20 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38      "77AB9A9D-78
36d50 42 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33  B9-4BA7-91AC-873
36d60 46 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a  F5338F1D2");....
36d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d80 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
36d90 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
36da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36db0 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35     "DCBE6C8D-0E5
36dc0 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46  7-4099-A183-98FF
36dd0 37 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20  74C64D9C");.... 
36de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
36df0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
36e00 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
36e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
36e30 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
36e40 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20  4C64D9D");....  
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
36e60 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
36e70 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
36e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e90 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41      "0EBAAB6E-CA
36ea0 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45  80-4B4A-8DDF-CBE
36eb0 36 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a  6BF058C71");....
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ed0 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76  package.DataProv
36ee0 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69  iderId = new Gui
36ef0 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
36f00 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36          "0EBAAB6
36f10 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46  E-CA80-4B4A-8DDF
36f20 2d 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b  -CBE6BF058C70");
36f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36f40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
36f50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
36f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
36fa0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
36fb0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
36fc0 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
36fd0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
36fe0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
36ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
37000 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
37010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37020 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
37030 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
37040 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
37050 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
37060 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
37070 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
37080 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
37090 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
370a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
370b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
370c0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
370d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
370e0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
370f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
37100 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37110 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
37120 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
37130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37150 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
37160 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
37180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
37190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
371a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
371b0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
371c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
371e0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
371f0 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
37210 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
37220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37230 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37240 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
37250 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
37260 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
37270 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
37280 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
37290 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
372a0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
372b0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
372c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
372d0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
372e0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
372f0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
37300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37320 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
37330 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
37340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37350 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37360 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
37370 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37380 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
37390 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
373a0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
373b0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
373c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
373d0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
373e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
373f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
37400 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
37410 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
37420 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
37430 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
37440 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
37450 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
37460 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
37470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
37480 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20  ey, "Packages", 
37490 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
374a0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
374b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
374e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
374f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37510 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
37520 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37540 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
37550 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
37560 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61   key: {0}\\Packa
37570 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ges",..         
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
375c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
375d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375f0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
37600 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
37610 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61 6e 67   *WARNING* Chang
37620 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 73 65  ing any of these
37630 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c 69 6b   values will lik
37640 65 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ely..           
37650 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37660 20 20 72 65 71 75 69 72 65 20 61 20 6e 65 77 20    require a new 
37670 22 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65  "package load ke
37680 79 22 20 28 50 4c 4b 29 20 74 6f 20 62 65 0d 0a  y" (PLK) to be..
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 65 6e      //       gen
376b0 65 72 61 74 65 64 20 69 6e 20 6f 72 64 65 72 20  erated in order 
376c0 74 6f 20 70 72 6f 70 65 72 6c 79 20 73 75 70 70  to properly supp
376d0 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74 68 65 0d  ort loading the.
376e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
376f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61       //       pa
37700 63 6b 61 67 65 20 69 6e 74 6f 20 56 69 73 75 61  ckage into Visua
37710 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20 61 6e  l Studio 2008 an
37720 64 20 65 61 72 6c 69 65 72 20 77 69 74 68 6f 75  d earlier withou
37730 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
37740 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37750 74 68 65 20 6d 61 74 63 68 69 6e 67 20 56 69 73  the matching Vis
37760 75 61 6c 20 53 74 75 64 69 6f 20 53 44 4b 20 62  ual Studio SDK b
37770 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64 2e 0d  eing installed..
37780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37790 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 50 6c       //       Pl
377a0 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74 68  ease refer to th
377b0 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e  e "SQLite.Design
377c0 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69 6c 65  er\plk.txt" file
377d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377e0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
377f0 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  or the existing 
37800 6f 66 66 69 63 69 61 6c 20 76 61 6c 75 65 73 20  official values 
37810 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 6d 20  and update them 
37820 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
37830 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
37840 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73   necessary.  Als
37850 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e  o, the newly gen
37860 65 72 61 74 65 64 20 70 61 63 6b 61 67 65 20 6c  erated package l
37870 6f 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oad..           
37880 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
37890 20 20 6b 65 79 20 69 74 73 65 6c 66 2c 20 77 68    key itself, wh
378a0 69 63 68 20 69 73 20 61 20 31 32 38 20 63 68 61  ich is a 128 cha
378b0 72 61 63 74 65 72 20 61 6c 70 68 61 6e 75 6d 65  racter alphanume
378c0 72 69 63 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ric..           
378d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
378e0 20 20 73 74 72 69 6e 67 2c 20 6d 75 73 74 20 62    string, must b
378f0 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20  e placed in the 
37900 72 65 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  resource string 
37910 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20  named..         
37920 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
37930 20 20 20 20 22 34 30 30 22 20 69 6e 20 74 68 65      "400" in the
37940 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
37950 72 5c 56 53 50 61 63 6b 61 67 65 2e 72 65 73 78  r\VSPackage.resx
37960 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
37970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37980 20 20 20 20 20 61 6e 64 20 74 68 65 6e 20 74 68       and then th
37990 65 20 64 65 73 69 67 6e 65 72 20 61 73 73 65 6d  e designer assem
379a0 62 6c 79 20 69 74 73 65 6c 66 20 6d 75 73 74 20  bly itself must 
379b0 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
379c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
379d0 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41 73   recompiled.  As
379e0 20 6f 66 20 74 68 69 73 20 77 72 69 74 69 6e 67   of this writing
379f0 20 28 69 6e 20 46 65 62 72 75 61 72 79 20 32 30   (in February 20
37a00 31 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  12),..          
37a10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37a20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     the following
37a30 20 55 52 4c 20 69 73 20 74 68 65 20 70 72 6f 70   URL is the prop
37a40 65 72 20 70 6c 61 63 65 20 74 6f 20 67 65 6e 65  er place to gene
37a50 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  rate..          
37a60 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37a70 20 20 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 20     package load 
37a80 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  keys:..         
37a90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 20 20 20 2f 2f 20 20 20 20 20 20 20 68 74 74 70     //       http
37ac0 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66  ://msdn.microsof
37ad0 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74 75  t.com/en-us/vstu
37ae0 64 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a 20 20  dio/cc655795..  
37af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b00 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
37b10 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
37b20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
37b30 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20   packageKey =.. 
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
37b60 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
37b70 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a  SubKey(subKey,..
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b90 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
37ba0 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
37bb0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
37bc0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37be0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
37bf0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
37c00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65     if (packageKe
37c30 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
37c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c70 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
37c80 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
37cb0 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
37cc0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
37cd0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b         key, pack
37d00 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
37d10 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
37d20 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
37d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d40 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
37d50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
37d60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
37d90 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
37da0 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c  packageKey, null
37db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
37dd0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
37de0 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
37df0 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
37e00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
37e30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37e40 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
37e50 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
37e60 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
37e70 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20   "Class",..     
37e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e90 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44         "SQLite.D
37ea0 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61  esigner.SQLitePa
37eb0 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20  ckage", whatIf, 
37ec0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
37ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ee0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
37ef0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
37f00 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61  kageKey, "CodeBa
37f10 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se",..          
37f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f30 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74    fileName, what
37f40 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
37f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f60 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
37f70 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
37f80 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44  (packageKey, "ID
37f90 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d  ", 400, whatIf,.
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 76 65 72               ver
37fc0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
37fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fe0 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
37ff0 72 79 20 3d 20 47 65 74 53 79 73 74 65 6d 44 69  ry = GetSystemDi
38000 72 65 63 74 6f 72 79 28 77 6f 77 36 34 29 3b 0d  rectory(wow64);.
38010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38020 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
38030 69 72 65 63 74 6f 72 79 20 3d 3d 20 6e 75 6c 6c  irectory == null
38040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
38050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
38060 69 72 65 63 74 6f 72 79 20 3d 20 53 74 72 69 6e  irectory = Strin
38070 67 2e 45 6d 70 74 79 3b 0d 0a 0d 0a 20 20 20 20  g.Empty;....    
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
380a0 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
380b0 61 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53  ageKey, "InprocS
380c0 65 72 76 65 72 33 32 22 2c 0d 0a 20 20 20 20 20  erver32",..     
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 50 61 74 68 2e 43 6f 6d 62         Path.Comb
380f0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
38100 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 0d 0a  mscoree.dll"),..
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
38130 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
38140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38150 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
38160 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
38170 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f  (packageKey, "Co
38180 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20  mpanyName",..   
38190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381a0 20 20 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f           "http:/
381b0 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c  /system.data.sql
381c0 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49  ite.org/", whatI
381d0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
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 52 65 67 69 73 74 72 79          Registry
38200 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
38210 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e  packageKey, "Min
38220 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Edition",..     
38230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38240 20 20 20 20 20 20 20 22 73 74 61 6e 64 61 72 64         "standard
38250 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
38260 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
38290 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
382a0 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65  ey, "ProductName
382b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
382e0 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b  0} Designer Pack
382f0 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  age", ProjectNam
38300 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38320 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
38330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
38340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
38350 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
38360 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
38370 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f  , "ProductVersio
38380 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
38390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383a0 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20   "1.0", whatIf, 
383b0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
383c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383d0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
383e0 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c  RegistryKey tool
383f0 62 6f 78 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  boxKey =..      
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38410 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
38420 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
38430 75 62 4b 65 79 28 70 61 63 6b 61 67 65 4b 65 79  ubKey(packageKey
38440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
38450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38460 20 20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68     "Toolbox", wh
38470 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
38480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
384a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384b0 20 20 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c          if (tool
384c0 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  boxKey == null).
384d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
384f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38510 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
38520 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
38530 20 20 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 20 20 22 63 6f 75              "cou
38550 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
38560 67 69 73 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d  gistry key: " +.
38570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38590 20 20 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62       "{0}\\Toolb
385a0 6f 78 22 2c 20 70 61 63 6b 61 67 65 4b 65 79 29  ox", packageKey)
385b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
385c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
385e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
385f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38620 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
38630 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
38640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38650 20 20 20 20 20 20 20 20 20 20 20 74 6f 6f 6c 62             toolb
38660 6f 78 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 20  oxKey, "Default 
38670 49 74 65 6d 73 22 2c 20 33 2c 20 77 68 61 74 49  Items", 3, whatI
38680 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386a0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
386b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
386e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
386f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
38700 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
38710 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
38720 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
38730 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
38740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38750 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
38760 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68  Menus", true, wh
38770 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
38780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
387a0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
387b0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
387e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
387f0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
38800 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..