System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c34687fb58ec13f2188c167580d10cb349b8ddbd:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62  n */..        ob
04a0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
04d0: 70 65 72 55 73 65 72 2c 20 20 20 20 20 20 20 20  perUser,        
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 77 6f 77          bool wow
0500: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  64,             
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 74 68 72 6f 77 4f       bool throwO
0530: 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20 20 20 20  nMissing,       
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 77 68 61 74 49 66 2c 20 20    bool whatIf,  
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20 20 20 20  ool verbose,    
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 72 65 66 20  */..        ref 
05b0: 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20 20 20 20  bool saved,     
05c0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f         /* out */
05d0: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
05e0: 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20 20 20  ring error      
05f0: 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a       /* out */..
0600: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
0660: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
0670: 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72  te bool Framewor
0680: 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  kRegistryCallbac
0690: 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74  k(..        Inst
06a0: 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74  aller.MockRegist
06b0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f  ryKey rootKey, /
06c0: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
06d0: 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
06e0: 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20  kName,          
06f0: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0700: 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
0710: 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
0720: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0730: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0740: 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  g platformName, 
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0760: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0770: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0780: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0790: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
07a0: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
07b0: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
07c0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
07d0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
07e0: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0800: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0810: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0820: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0830: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0840: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0860: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0870: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0880: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
08a0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
08b0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08d0: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
08e0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  );....    //////
08f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74  /////....    int
0940: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62  ernal delegate b
0950: 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f  ool VisualStudio
0960: 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b  RegistryCallback
0970: 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61  (..        Insta
0980: 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72  ller.MockRegistr
0990: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a  yKey rootKey, /*
09a0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
09b0: 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
09c0: 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n,              
09d0: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
09e0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
09f0: 69 78 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ix,             
0a00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f          /* in, o
0a10: 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20  ptional */..    
0a20: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61      Installer.Pa
0a30: 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20  ckage package,  
0a40: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0a50: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0a60: 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20  clientData,     
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0a80: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f  n */..        bo
0a90: 6f 6c 20 70 65 72 55 73 65 72 2c 20 20 20 20 20  ol perUser,     
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0ac0: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 20 20     bool wow64,  
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0af0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
0b00: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20  owOnMissing,    
0b10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0b20: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
0b30: 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20 20 20  l whatIf,       
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0b60: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20    bool verbose, 
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b80: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0b90: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0ba0: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0bb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
0bc0: 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 20 20 20   */..    );..   
0bd0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
0be0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0c30: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75  ..    #region Pu
0c40: 62 6c 69 63 20 45 6e 75 6d 65 72 61 74 69 6f 6e  blic Enumeration
0c50: 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d  s..    [Flags()]
0c60: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75  ..    public enu
0c70: 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  m InstallFlags..
0c80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
0c90: 72 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 46 6c  region Normal Fl
0ca0: 61 67 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ags..        Non
0cb0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0cc0: 20 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79    GlobalAssembly
0cd0: 43 61 63 68 65 20 3d 20 30 78 31 2c 0d 0a 20 20  Cache = 0x1,..  
0ce0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 46 6f        AssemblyFo
0cf0: 6c 64 65 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20  lders = 0x2,..  
0d00: 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65 72        DbProvider
0d10: 46 61 63 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a  Factory = 0x4,..
0d20: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
0d30: 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  e = 0x8,..      
0d40: 20 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61    VsPackageGloba
0d50: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
0d60: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
0d70: 56 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30  VsDataSource = 0
0d80: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73  x20,..        Vs
0d90: 44 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30  DataProvider = 0
0da0: 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  x40,..        #e
0db0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
0dc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0e10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
0e20: 6f 6d 70 6f 73 69 74 65 20 46 6c 61 67 73 0d 0a  omposite Flags..
0e30: 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
0e40: 6b 20 3d 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62  k = GlobalAssemb
0e50: 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d 62  lyCache | Assemb
0e60: 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20 20  lyFolders |..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e90: 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ry,....        /
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0ef0: 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67 65    Vs = VsPackage
0f00: 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f 62   | VsPackageGlob
0f10: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f20: 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20 7c  | VsDataSource |
0f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 56  ..             V
0f40: 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a  sDataProvider,..
0f50: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  /....        All
0fb0: 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20 56   = Framework | V
0fc0: 73 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  s,....        //
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1020: 20 41 6c 6c 45 78 63 65 70 74 47 6c 6f 62 61 6c   AllExceptGlobal
1030: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
1040: 41 6c 6c 20 26 20 7e 28 47 6c 6f 62 61 6c 41 73  All & ~(GlobalAs
1050: 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d 0a 20  semblyCache |.. 
1060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 47        VsPackageG
1090: 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
10a0: 68 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 65  he),..        #e
10b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
10c0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1110: 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d         Default =
1120: 20 41 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   All..    }.... 
1130: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1180: 0d 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d  ..    [Flags()].
1190: 0a 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d  .    public enum
11a0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
11b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e      {..        N
11c0: 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20  one = 0x0,..    
11d0: 20 20 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31      Lowest = 0x1
11e0: 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72  ,..        Lower
11f0: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
1200: 20 4c 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20   Low = 0x4,..   
1210: 20 20 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d       MediumLow =
1220: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d   0x8,..        M
1230: 65 64 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20  edium = 0x10,.. 
1240: 20 20 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67         MediumHig
1250: 68 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  h = 0x20,..     
1260: 20 20 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d     High = 0x40,.
1270: 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20  .        Higher 
1280: 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x80,..       
1290: 20 48 69 67 68 65 73 74 20 3d 20 30 78 31 30 30   Highest = 0x100
12a0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75  ,..        Defau
12b0: 6c 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20  lt = Medium..   
12c0: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
12d0: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
1330: 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43  gion Installer C
1340: 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54 5f 34 30  lass..#if NET_40
1350: 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45   || NET_45 || NE
1360: 54 5f 34 35 31 0d 0a 20 20 20 20 5b 53 65 63 75  T_451..    [Secu
1370: 72 69 74 79 43 72 69 74 69 63 61 6c 28 29 5d 0d  rityCritical()].
1380: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b 53 65 63  .#else..    [Sec
1390: 75 72 69 74 79 50 65 72 6d 69 73 73 69 6f 6e 28  urityPermission(
13a0: 53 65 63 75 72 69 74 79 41 63 74 69 6f 6e 2e 4c  SecurityAction.L
13b0: 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e  inkDemand, Unman
13c0: 61 67 65 64 43 6f 64 65 20 3d 20 74 72 75 65 29  agedCode = true)
13d0: 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 69  ]..#endif..    i
13e0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
13f0: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
1400: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
1410: 72 65 67 69 6f 6e 20 55 6e 73 61 66 65 20 4e 61  region Unsafe Na
1420: 74 69 76 65 20 4d 65 74 68 6f 64 73 20 43 6c 61  tive Methods Cla
1430: 73 73 0d 0a 20 20 20 20 20 20 20 20 5b 53 75 70  ss..        [Sup
1440: 70 72 65 73 73 55 6e 6d 61 6e 61 67 65 64 43 6f  pressUnmanagedCo
1450: 64 65 53 65 63 75 72 69 74 79 28 29 5d 0d 0a 20  deSecurity()].. 
1460: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1470: 65 61 6c 65 64 20 63 6c 61 73 73 20 55 6e 73 61  ealed class Unsa
1480: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 0d  feNativeMethods.
1490: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
14a0: 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
14b0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74       #region Nat
14c0: 69 76 65 20 57 69 6e 33 32 20 43 6f 6e 73 74 61  ive Win32 Consta
14d0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
14e0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
14f0: 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d 20 32 36  nt MAX_PATH = 26
1500: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
1510: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1560: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1570: 73 74 20 69 6e 74 20 43 53 49 44 4c 5f 53 59 53  st int CSIDL_SYS
1580: 54 45 4d 58 38 36 20 3d 20 30 78 30 30 32 39 3b  TEMX86 = 0x0029;
1590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
15f0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1600: 20 69 6e 74 20 53 48 47 46 50 5f 54 59 50 45 5f   int SHGFP_TYPE_
1610: 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a  CURRENT = 0;....
1620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1680: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1690: 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a 20 48 52   S_OK = 0; /* HR
16a0: 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20 20 20 20  ESULT */..      
16b0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1720: 20 20 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76     #region Nativ
1730: 65 20 57 69 6e 64 6f 77 73 20 4d 65 74 68 6f 64  e Windows Method
1740: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1750: 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68 66 6f 6c  DllImport("shfol
1760: 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20 20 20 20  der.dll",..     
1770: 20 20 20 20 20 20 20 20 20 20 20 43 61 6c 6c 69             Calli
1780: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20 3d 20 43  ngConvention = C
1790: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
17a0: 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20 20 20 20  .Winapi,..      
17b0: 20 20 20 20 20 20 20 20 20 20 43 68 61 72 53 65            CharSe
17c0: 74 20 3d 20 43 68 61 72 53 65 74 2e 41 75 74 6f  t = CharSet.Auto
17d0: 2c 20 42 65 73 74 46 69 74 4d 61 70 70 69 6e 67  , BestFitMapping
17e0: 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20   = false,..     
17f0: 20 20 20 20 20 20 20 20 20 20 20 54 68 72 6f 77             Throw
1800: 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43 68 61 72  OnUnmappableChar
1810: 20 3d 20 74 72 75 65 2c 20 53 65 74 4c 61 73 74   = true, SetLast
1820: 45 72 72 6f 72 20 3d 20 74 72 75 65 29 5d 0d 0a  Error = true)]..
1830: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1840: 61 74 65 20 73 74 61 74 69 63 20 65 78 74 65 72  ate static exter
1850: 6e 20 69 6e 74 20 53 48 47 65 74 46 6f 6c 64 65  n int SHGetFolde
1860: 72 50 61 74 68 28 0d 0a 20 20 20 20 20 20 20 20  rPath(..        
1870: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68          IntPtr h
1880: 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74 20 6e 46  WndOwner, int nF
1890: 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72 20 68 54  older, IntPtr hT
18a0: 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c 61 67 73  oken, uint flags
18b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18c0: 20 20 20 49 6e 74 50 74 72 20 62 75 66 66 65 72     IntPtr buffer
18d0: 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41 54 48 20   /* >= MAX_PATH 
18e0: 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  */);..          
18f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1950: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1960: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 57 72  region Public Wr
1970: 61 70 70 65 72 20 4d 65 74 68 6f 64 73 0d 0a 20  apper Methods.. 
1980: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1990: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
19a0: 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
19b0: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
19c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19d0: 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66 66       IntPtr buff
19e0: 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  er = IntPtr.Zero
19f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a00: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1a10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a30: 20 62 75 66 66 65 72 20 3d 20 4d 61 72 73 68 61   buffer = Marsha
1a40: 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d  l.AllocCoTaskMem
1a50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a60: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
1a70: 66 28 63 68 61 72 29 20 2a 20 28 4d 41 58 5f 50  f(char) * (MAX_P
1a80: 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20  ATH + 1));....  
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa0: 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d 20    if (buffer != 
1ab0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1af0: 28 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74 68  (SHGetFolderPath
1b00: 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20  (IntPtr.Zero,.. 
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1b30: 53 49 44 4c 5f 53 59 53 54 45 4d 58 38 36 2c 20  SIDL_SYSTEMX86, 
1b40: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 48                SH
1b70: 47 46 50 5f 54 59 50 45 5f 43 55 52 52 45 4e 54  GFP_TYPE_CURRENT
1b80: 2c 20 62 75 66 66 65 72 29 20 3d 3d 20 53 5f 4f  , buffer) == S_O
1b90: 4b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K)..            
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bd0: 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54 6f 53  n Marshal.PtrToS
1be0: 74 72 69 6e 67 41 75 74 6f 28 62 75 66 66 65 72  tringAuto(buffer
1bf0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c40: 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1c50: 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ca0: 54 4f 44 4f 3a 20 49 73 20 74 68 69 73 20 74 68  TODO: Is this th
1cb0: 65 20 72 69 67 68 74 20 65 72 72 6f 72 20 68 61  e right error ha
1cc0: 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d  ndling solution.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
1cf0: 20 75 73 65 20 61 74 20 74 68 69 73 20 70 6f 69   use at this poi
1d00: 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt?..           
1d10: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d40: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d50: 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d70: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1d80: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1d90: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1da0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67 65 74 20   "Could not get 
1dd0: 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
1de0: 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a 20 20 20  : {0}", e),..   
1df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e00: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1e10: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
1e30: 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w;..            
1e40: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e50: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e80: 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65         if (buffe
1e90: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
1ea0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 4d 61 72 73 68 61 6c 2e 46 72 65 65 43 6f    Marshal.FreeCo
1ee0: 54 61 73 6b 4d 65 6d 28 62 75 66 66 65 72 29 3b  TaskMem(buffer);
1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f00: 20 20 20 20 20 20 20 20 20 20 62 75 66 66 65 72            buffer
1f10: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f60: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
1f70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f80: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1f90: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1fa0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2010: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
2020: 69 76 61 74 65 20 48 65 6c 70 65 72 20 43 6c 61  ivate Helper Cla
2030: 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20 23 72  sses..        #r
2040: 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20 43 6c  egion AnyPair Cl
2050: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2060: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
2070: 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20 54 32  s AnyPair<T1, T2
2080: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
2090: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
20a0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
20b0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
20c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20d0: 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54     // WARNING: T
20e0: 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  his constructor 
20f0: 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d 6d 75  produces an immu
2100: 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20 70 61  table "empty" pa
2110: 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ir..            
2120: 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  //          obje
2130: 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct...           
2140: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2150: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
2160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2170: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
2180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
21a0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
21b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2210: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2220: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 29  ic AnyPair(T1 x)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2240: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
2250: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2260: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
2270: 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20 20 20  x = x;..        
2280: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2290: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
22f0: 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54 32 20  nyPair(T1 x, T2 
2300: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
2310: 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d 0a 20      : this(x).. 
2320: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
2340: 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20 20 20  is.y = y;..     
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2360: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2370: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f  ////////////////
23a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
23e0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
23f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2400: 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20 20 20  e T1 x;..       
2410: 20 20 20 20 20 70 75 62 6c 69 63 20 54 31 20 58       public T1 X
2420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2440: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 78 3b   get { return x;
2450: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2460: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2470: 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24c0: 20 20 20 20 70 72 69 76 61 74 65 20 54 32 20 79      private T2 y
24d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24e0: 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20 20 20  ublic T2 Y..    
24f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2500: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2510: 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a 20 20   return y; }..  
2520: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2530: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2540: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
2550: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2560: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25c0: 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 4f 70   #region TraceOp
25d0: 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  s Class..       
25e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25f0: 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73 0d 0a  class TraceOps..
2600: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2610: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2620: 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73  rivate Constants
2630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2640: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
2650: 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75 67 46  ng DefaultDebugF
2660: 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20  ormat = "#{0} @ 
2670: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20  {1}: {2}";..    
2680: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2690: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
26a0: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
26b0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
26c0: 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
26d0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
26e0: 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31  t string Iso8601
26f0: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
2700: 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  rmat =..        
2710: 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d          "yyyy.MM
2720: 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66  .ddTHH:mm:ss.fff
2730: 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20  ffff";..        
2740: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
27b0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
27c0: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
27d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27e0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
27f0: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f  syncRoot = new o
2800: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
2810: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2820: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65  atic long nextDe
2830: 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  bugId;..        
2840: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2850: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63  ic long nextTrac
2860: 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eId;..          
2870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2880: 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74   IList<TraceList
2890: 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65  ener> debugListe
28a0: 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ners;..         
28b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
28c0: 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  c TracePriority 
28d0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
28e0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
28f0: 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  fault;..        
2900: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2910: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2920: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d   tracePriority =
2930: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
2940: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  efault;..       
2950: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2960: 74 69 63 20 73 74 72 69 6e 67 20 64 65 62 75 67  tic string debug
2970: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74  Format = Default
2980: 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  DebugFormat;..  
2990: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
29a0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
29b0: 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65  traceFormat = De
29c0: 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74  faultTraceFormat
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
29e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2a50: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
2a60: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
2a70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2a80: 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69   static TracePri
2a90: 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72  ority DebugPrior
2aa0: 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ity..           
2ab0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ac0: 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28      get { lock (
2ad0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75  syncRoot) { retu
2ae0: 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  rn debugPriority
2af0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
2b00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
2b10: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64  k (syncRoot) { d
2b20: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76  ebugPriority = v
2b30: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
2b40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b50: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2bb0: 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  c static TracePr
2bc0: 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69 6f  iority TracePrio
2bd0: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
2be0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bf0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2c00: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2c10: 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
2c20: 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  y; } }..        
2c30: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
2c40: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2c50: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
2c60: 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20  value; } }..    
2c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2ce0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2cf0: 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
2d00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2d20: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
2d30: 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  t) { return debu
2d40: 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20  gFormat; } }..  
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
2d60: 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f  t { lock (syncRo
2d70: 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  ot) { debugForma
2d80: 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  t = value; } }..
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e00: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2e10: 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
2e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e40: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
2e50: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
2e60: 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d  traceFormat; } }
2e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e80: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2e90: 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46  ncRoot) { traceF
2ea0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
2eb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2ed0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ee0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2f40: 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20  ion Interactive 
2f50: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
2f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2f70: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2f80: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2f90: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2fa0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2fb0: 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20  ic DialogResult 
2fc0: 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2fe0: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
2ff0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3000: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3010: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
3020: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
3030: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3040: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
3050: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3060: 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
3070: 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20   assembly,..    
3080: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3090: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
30b0: 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20  ing category,.. 
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
30d0: 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
30e0: 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20   buttons,..     
30f0: 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
3100: 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a  geBoxIcon icon..
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3140: 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72    DialogResult r
3150: 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65  esult = DialogRe
3160: 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20  sult.OK;....    
3170: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
3180: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
3190: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
31b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
31c0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73  ceCallback, mess
31d0: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
31e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31f0: 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66     if (SystemInf
3200: 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74  ormation.UserInt
3210: 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20  eractive)..     
3220: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3240: 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d    string title =
3250: 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c   GetAssemblyTitl
3260: 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a  e(assembly);....
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d      if (title ==
3290: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74  title = Applicat
32c0: 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b  ion.ProductName;
32d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32e0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
32f0: 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77   MessageBox.Show
3300: 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c  (message, title,
3310: 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b   buttons, icon);
3320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3330: 20 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64          DebugAnd
3340: 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72  Trace(tracePrior
3350: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3370: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
3380: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
3390: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63 65      "User choice
33c0: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   of {0}.", ForDi
33d0: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d  splay(result)),.
33e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f0: 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72           categor
3400: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3410: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3420: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
3430: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3460: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3490: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
34a0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f      "Default cho
34d0: 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f  ice of {0}.", Fo
34e0: 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29  rDisplay(result)
34f0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
3500: 20 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79          category
3510: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
3520: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3530: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
3540: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
3550: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
3560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
35b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
35c0: 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75  egion Tracing Su
35d0: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
35e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
35f0: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65  c static void Se
3600: 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72  tupDebugListener
3610: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
3620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3630: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
3640: 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d  teners == null).
3650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3660: 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e       debugListen
3670: 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54  ers = new List<T
3680: 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b  raceListener>();
3690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36a0: 20 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65      debugListene
36b0: 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f  rs.Add(new Conso
36c0: 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  leTraceListener(
36d0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
36e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3740: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3750: 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75  ic long NextDebu
3760: 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  gId()..         
3770: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3780: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
3790: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65  erlocked.Increme
37a0: 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62 75 67  nt(ref nextDebug
37b0: 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Id);..          
37c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37d0: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3830: 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61  tic long NextTra
3840: 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20  ceId()..        
3850: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3870: 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d  terlocked.Increm
3880: 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72 61 63  ent(ref nextTrac
3890: 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  eId);..         
38a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
38b0: 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3900: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3910: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65  atic string Time
3920: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64  Stamp(DateTime d
3930: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20  ateTime)..      
3940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3950: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
3960: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e  dateTime.ToStrin
3970: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g(Iso8601DateTim
3980: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d  eOutputFormat);.
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
39a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3a00: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3a10: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3a20: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3a30: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3a40: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
3a50: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20  etMethodName(.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
3a70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
3a80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
3a90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
3aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
3ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ad0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
3ae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3b10: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3b20: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63   If a valid stac
3b30: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20  k trace was not 
3b40: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d  supplied by the.
3b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3b60: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
3b70: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65  ller, create one
3b80: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68   now based on th
3b90: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3bb0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f  /       executio
3bc0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bf0: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54        if (stackT
3c00: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  race == null).. 
3c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3c60: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72  E: Grab the curr
3c70: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74  ent execution st
3c80: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cb0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54            stackT
3cc0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b  race = new Stack
3cd0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Trace();....    
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20  // NOTE: Always 
3d20: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66  skip this call f
3d30: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70  rame when we cap
3d40: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3d60: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b         the stack
3d70: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20   trace...       
3d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d90: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3db0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  el++;..         
3dc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3e00: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65  OTE: Get the spe
3e10: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61  cified stack fra
3e20: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f  me (always add o
3e30: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ne to..         
3e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3e50: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65      skip this me
3e60: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20  thod)...        
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e90: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73      StackFrame s
3ea0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63  tackFrame = stac
3eb0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28  kTrace.GetFrame(
3ec0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  level);....     
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3ee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3ef0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3f00: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66  Get the method f
3f10: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61  or the stack fra
3f20: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
3f30: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f50: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68   MethodBase meth
3f60: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72  odBase = stackFr
3f70: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b  ame.GetMethod();
3f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3f90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fb0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
3fc0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65   type for the me
3fd0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
3fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4000: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d     Type type = m
4010: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72  ethodBase.Declar
4020: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  ingType;....    
4030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4040: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4050: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4060: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66   Get the name of
4070: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
40a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
40b0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61   name = methodBa
40c0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  se.Name;....    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
40f0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4100: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70   Return the prop
4110: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72  erly formatted r
4120: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
4130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4150: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
4160: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4180: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
4190: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e  type.Name, Type.
41a0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29  Delimiter, name)
41b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
41c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
41d0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4210: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
4220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4240: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4260: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
42b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
42c0: 61 74 69 63 20 76 6f 69 64 20 44 65 62 75 67 43  atic void DebugC
42d0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
42e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
42f0: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
4300: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
4310: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
4320: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4340: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
4350: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
4360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
4390: 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ners != null).. 
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
43d0: 72 65 61 63 68 20 28 54 72 61 63 65 4c 69 73 74  reach (TraceList
43e0: 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e  ener listener in
43f0: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29   debugListeners)
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4410: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65           listene
4440: 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73  r.WriteLine(mess
4450: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
4460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4480: 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a  tener.Flush();..
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
44c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
44e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
44f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4530: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4540: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4550: 69 63 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72  ic void TraceCor
4560: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4570: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
4580: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
4590: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
45a0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
45b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
45c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
45d0: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
45e0: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
45f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4620: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4630: 20 57 72 69 74 65 20 74 68 65 20 6d 65 73 73 61   Write the messa
4640: 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63  ge to all the ac
4650: 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20  tive trace..    
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4670: 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65  //       listene
4680: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
4690: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
46c0: 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f  (message, catego
46d0: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
46e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
46f0: 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20  Flush();..      
4700: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4710: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4720: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
4780: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
4790: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
47a0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
47b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
47c0: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
47d0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
47e0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
47f0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
4800: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
4810: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
4820: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
4830: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
4840: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
4850: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
4860: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4870: 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78      Exception ex
4880: 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ception,..      
4890: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
48a0: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
48b0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
48c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
48e0: 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75  (exception != nu
48f0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4910: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
4920: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62  acePriority, deb
4930: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4950: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
4960: 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61  ck, new StackTra
4970: 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72  ce(exception, tr
4980: 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20  ue), 0,..       
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
49a0: 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72   exception.ToStr
49b0: 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29  ing(), category)
49c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
49d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
49e0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
49f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4a50: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
4a60: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
4a70: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
4a80: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4a90: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
4aa0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ac0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
4ad0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4af0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
4b00: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4b20: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
4b30: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4b40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4b50: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4b60: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4b70: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4b90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4bb0: 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61  turn DebugAndTra
4bc0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4bd0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 50 72           tracePr
4be0: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c  iority, debugCal
4bf0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
4c00: 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a  back, null, 1,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c20: 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74      message, cat
4c30: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
4c40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4c50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4ca0: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
4cb0: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
4cc0: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
4cd0: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
4ce0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
4cf0: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
4d00: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
4d10: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
4d20: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
4d30: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
4d40: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
4d50: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
4d60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4d70: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4d80: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
4d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4da0: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
4db0: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
4dc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
4dd0: 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  el,..           
4de0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4df0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
4e00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
4e10: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
4e20: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4e30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4e40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e60: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
4e70: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
4e80: 65 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74  e if the stack t
4e90: 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20  race is..       
4ea0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4eb0: 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61    going to be ca
4ec0: 70 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74  ptured by GetMet
4ed0: 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  hodName...      
4ee0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4f00: 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20   (stackTrace == 
4f10: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4f20: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
4f30: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
4f40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f60: 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d  TE: Format the m
4f70: 65 73 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c  essage for displ
4f80: 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20  ay (once)...    
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64  string formatted
4fc0: 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
4fd0: 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20  ("{0}: {1}",..  
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ff0: 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28    GetMethodName(
5000: 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65  stackTrace, leve
5010: 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d  l), message);...
5020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5030: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5040: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5050: 20 74 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62   the debug callb
5060: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f  ack is invalid o
5070: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f  r the trace prio
5080: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
5090: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
50a0: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69  f this message i
50b0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74  s less than what
50c0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61   we currently wa
50d0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  nt to..         
50e0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
50f0: 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d  debug, skip it..
5100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5110: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5120: 20 20 20 20 20 69 66 20 28 28 64 65 62 75 67 43       if ((debugC
5130: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
5140: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
5150: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50           (traceP
5160: 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67  riority >= Debug
5170: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20  Priority))..    
5180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
51b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
51c0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64  TE: Invoke the d
51d0: 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69  ebug callback wi
51e0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64  th the formatted
51f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5200: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
5210: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63  essage and the c
5220: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65  ategory specifie
5230: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5250: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5280: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
5290: 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74  gCallback(format
52a0: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ted, category);.
52b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
52c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
52d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
52e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
52f0: 45 3a 20 49 66 20 74 68 65 20 74 72 61 63 65 20  E: If the trace 
5300: 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61  callback is inva
5310: 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65  lid or the trace
5320: 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
5330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5340: 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73      of this mess
5350: 61 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  age is less than
5360: 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74   what we current
5370: 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20  ly want to..    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5390: 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70       trace, skip
53a0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...          
53b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
53c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 74            if ((t
53d0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20  raceCallback != 
53e0: 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20  null) &&..      
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74                (t
5400: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20  racePriority >= 
5410: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d  TracePriority)).
5420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5440: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20  // NOTE: Invoke 
5470: 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61  the trace callba
5480: 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d  ck with the form
5490: 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  atted..         
54a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
54b0: 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20      message and 
54c0: 74 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65  the category spe
54d0: 63 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20  cified by the.. 
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54f0: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
5500: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...           
5510: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5530: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66   traceCallback(f
5540: 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f  ormatted, catego
5550: 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
5560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5570: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5580: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20  n message;..    
5590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
55a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
55b0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
55c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
55d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
55e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
55f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5620: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
5630: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73  region MockRegis
5640: 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  try Class..     
5650: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
5660: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
5670: 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62  stry : IDisposab
5680: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
5690: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
56a0: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
56b0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
56c0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
56d0: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20  egistry()..     
56e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
56f0: 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
5700: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5710: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e            readOn
5720: 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ly = true;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66 65              safe
5740: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
57b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
57c0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a   MockRegistry(..
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
5820: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5830: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77 68           this.wh
5840: 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a  atIf = whatIf;..
5850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
58c0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
58d0: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
58e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
58f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5900: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5910: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
5920: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
5930: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
5940: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
5950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5960: 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e       this.readOn
5970: 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a  ly = readOnly;..
5980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
59f0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
5a00: 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
5a10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
5a20: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
5a30: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
5a40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
5a50: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
5a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a80: 20 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c    : this(whatIf,
5a90: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
5aa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5ab0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
5ac0: 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20  safe = safe;..  
5ad0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5ae0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
5af0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
5b00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5b50: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
5b60: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
5b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
5b80: 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
5b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
5ba0: 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
5bb0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
5bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5bd0: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
5be0: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
5bf0: 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20  whatIf; }..     
5c00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5c10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5c20: 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65  ; whatIf = value
5c30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5c40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5c50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ca0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5cb0: 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  l readOnly;..   
5cc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5cd0: 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20  bool ReadOnly.. 
5ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5d00: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d10: 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64  d(); return read
5d20: 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Only; }..       
5d30: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5d40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5d50: 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65  readOnly = value
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5d70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5d80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5dd0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
5de0: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  l safe;..       
5df0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
5e00: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   Safe..         
5e10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5e20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
5e30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
5e40: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20  urn safe; }..   
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
5e60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5e70: 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65  (); safe = value
5e80: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5e90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5ea0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ee0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ef0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
5f00: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61  kRegistryKey cla
5f10: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
5f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
5f30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c  ckRegistryKey Cl
5f40: 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20  assesRoot..     
5f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5f60: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
5fa0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5fc0: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d   (classesRoot ==
5fd0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ff0: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65  classesRoot = ne
6000: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6010: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73  Registry.Classes
6040: 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65  Root, whatIf, re
6050: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
6060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61        return cla
6080: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
6090: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
60a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
60b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6110: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
6120: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e  ryKey currentCon
6130: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fig;..          
6140: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
6150: 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74  istryKey Current
6160: 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  Config..        
6170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6180: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6190: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
61c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
61d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
61e0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20  urrentConfig == 
61f0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
6210: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e  urrentConfig = n
6220: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6230: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6250: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
6260: 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c  tConfig, whatIf,
6270: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6280: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6290: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
62a0: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a  currentConfig;..
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
62d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6330: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
6340: 65 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65  egistryKey curre
6350: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
6360: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6370: 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72  RegistryKey Curr
6380: 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20  entUser..       
6390: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
63a0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63d0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
63e0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6400: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e  currentUser == n
6410: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
6430: 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20  rrentUser = new 
6440: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6470: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
6480: 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  er, whatIf, read
6490: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64b0: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
64c0: 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20  ntUser;..       
64d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
64e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
64f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6540: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6550: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6560: 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  Key dynData;..  
6570: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6590: 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20   DynData..      
65a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
65b0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
65c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
65d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
65e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
65f0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6610: 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c  (dynData == null
6620: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6630: 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61             dynDa
6640: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6650: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6670: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6680: 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c  DynData, whatIf,
6690: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
66a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
66b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
66c0: 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  dynData;..      
66d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
66e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
66f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6750: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6760: 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e  yKey localMachin
6770: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6780: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6790: 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68  tryKey LocalMach
67a0: 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ine..           
67b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
67c0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
67d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6810: 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61          if (loca
6820: 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c  lMachine == null
6830: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6840: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c             local
6850: 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f  Machine = new Mo
6860: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6890: 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
68a0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
68b0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d     return localM
68e0: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
68f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6900: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6910: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6960: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
6970: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
6980: 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44  Key performanceD
6990: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ata;..          
69a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
69b0: 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d  istryKey Perform
69c0: 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20  anceData..      
69d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
69e0: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
6a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a10: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
6a20: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6a40: 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61  (performanceData
6a50: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
6a80: 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ta = new MockReg
6a90: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ab0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6ac0: 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c  PerformanceData,
6ad0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6ae0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b00: 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61   return performa
6b10: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
6b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6ba0: 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72  vate MockRegistr
6bb0: 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20  yKey users;..   
6bc0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6bd0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6be0: 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  Users..         
6bf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6c00: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6c10: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c30: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6c40: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6c50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
6c60: 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ers == null)..  
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65        users = ne
6c90: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6ca0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cc0: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20  Registry.Users, 
6cd0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
6ce0: 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20  , safe);....    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20  return users;.. 
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6d40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6da0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
6db0: 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69 73 74  n Public "Regist
6dc0: 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ry" Methods..   
6dd0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6de0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
6df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6e00: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
6e10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
6e20: 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e     string valueN
6e30: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6e40: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
6e50: 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20  aultValue..     
6e60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6e70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6e90: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
6ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6eb0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
6ec0: 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d  .GetValue(keyNam
6ed0: 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65  e, valueName, de
6ee0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
6ef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6f00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6f60: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
6f70: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
6f80: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
6f90: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
6fa0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
6fb0: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
6fc0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
6fd0: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
6fe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
6ff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7000: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
7010: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7020: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7030: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7050: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7070: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7080: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7090: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  eName, value);..
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
70c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7110: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
7120: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
7130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
7140: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
7150: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
7160: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
7170: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
7180: 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  t value,..      
7190: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
71a0: 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75  ryValueKind valu
71b0: 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  eKind..         
71c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
71d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
71e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
71f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
7200: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7210: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
7220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7230: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7250: 20 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c   Registry.SetVal
7260: 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75  ue(keyName, valu
7270: 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61  eName, value, va
7280: 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  lueKind);..     
7290: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
72a0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
72b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
72c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7310: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
7320: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
7330: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7340: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
7350: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
7360: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7370: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7380: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
7390: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
73a0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
73b0: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
73c0: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
73d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
73e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
73f0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7410: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7420: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
7430: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
7440: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
7450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7460: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7470: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7480: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
74d0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
74e0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
74f0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
7500: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7510: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
7520: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
7530: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
7540: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
7550: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
7560: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7570: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
7580: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
75a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
75b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
75c0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
75d0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
7600: 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  try).Name);..   
7610: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7620: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7680: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
7690: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
76a0: 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20  d Dispose(..    
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
76c0: 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20   disposing..    
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7700: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7730: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69       if (disposi
7740: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
7750: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7770: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77b0: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
77c0: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
77d0: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7810: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
7840: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7860: 20 20 7b 0d 0a 20 20 20 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: 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f   classesRoot.Clo
7890: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d     classesRoot =
78c0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7900: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21  (currentConfig !
7910: 3d 20 6e 75 6c 6c 29 0d 0a 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: 20 7b 0d 0a 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 20                  
7950: 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c  currentConfig.Cl
7960: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
7990: 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  g = null;..     
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
79e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 20 7b 0d 0a 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 20 20                  
7a20: 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f   currentUser.Clo
7a30: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d     currentUser =
7a60: 20 6e 75 6c 6c 3b 0d 0a 20 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: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7aa0: 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c  (dynData != null
7ab0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7ac0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
7af0: 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  a.Close();..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b10: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 20          dynData 
7b20: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7b60: 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21   (localMachine !
7b70: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f  localMachine.Clo
7bc0: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20     localMachine 
7bf0: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7c30: 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74   (performanceDat
7c40: 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  a != null)..    
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61     performanceDa
7c90: 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ta.Close();..   
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d           perform
7cc0: 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b  anceData = null;
7cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ce0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d00: 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72 73         if (users
7d10: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 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 20 7b 0d 0a 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 20 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b    users.Close();
7d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
7d80: 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ers = null;..   
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7dd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e10: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
7e20: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
7e30: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7e80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
7eb0: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
7ec0: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ef0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
7f00: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
7f10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7f20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
7f30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
7f40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7fa0: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
7fb0: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7fd0: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
7fe0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8000: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8020: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
8030: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
8040: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8050: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
8060: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
8070: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
80c0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
80d0: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
80e0: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
80f0: 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  try()..         
8100: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8110: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
8120: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
8130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8140: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
8150: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8160: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
8170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
81c0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
81d0: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  n MockRegistryKe
81e0: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
81f0: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
8200: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
8210: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73  tryKey : IDispos
8220: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8240: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
8250: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
8260: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
8270: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
8280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82a0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
82b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
82c0: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
82d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
82e0: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
82f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8310: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8320: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8370: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8380: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
8390: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
83a0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
83b0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
83c0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
83d0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
8400: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
8410: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8420: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
8430: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20   = key;..       
8440: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8450: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
84a0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
84b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
84c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
84d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
84e0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
84f0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8500: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
8510: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8520: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
8530: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20  (key)..         
8540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8550: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65        this.subKe
8560: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61  yName = subKeyNa
8570: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
8580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8590: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
85a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
85e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
85f0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8610: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8630: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8640: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8650: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
8660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8670: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8680: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8690: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20  subKeyName)..   
86a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
86c0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
86d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
86e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
86f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8740: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8750: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8760: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8770: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8790: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
87b0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87d0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
87f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8800: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8810: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
8820: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8840: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
8850: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
8860: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8870: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
88c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
88d0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
88e0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
88f0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8900: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8910: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8920: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8930: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8940: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8950: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
8960: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
8970: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
8980: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
8990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
89a0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
89b0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
89c0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
89d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
89f0: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
8a00: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
8a10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8a20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8a70: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
8a80: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
8aa0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8af0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8b00: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  , whatIf)..     
8b10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8b20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8b30: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8b40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8b50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8ba0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8bb0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8bc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8bd0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8be0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8bf0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8c10: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
8c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8c40: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
8c50: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
8c60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
8c70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8c80: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
8c90: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
8ca0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8cb0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8d00: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8d10: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d30: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8d40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8d50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d70: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
8d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d90: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
8da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dc0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
8dd0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
8de0: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20  ly, safe)..     
8df0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8e00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
8e10: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
8e20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8e30: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8ea0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
8eb0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
8ec0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
8ed0: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20  d Close()..     
8ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8f10: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73   NOTE: No dispos
8f20: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65  ed check here be
8f30: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68  cause calling th
8f40: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  is method..     
8f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8f60: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75      should be ju
8f70: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20  st like calling 
8f80: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20  Dispose...      
8f90: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
8fb0: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
8fc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8fd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9030: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
9040: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
9050: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9060: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
9070: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
9080: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9090: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
90a0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
90b0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
90c0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
90d0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
90f0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
9100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9110: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
9120: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9130: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
9140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9160: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9180: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
9190: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
91a0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
91b0: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91d0: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77  /       fails, w
91e0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
91f0: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64  turn the wrapped
9200: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20   root key..     
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9220: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73  /       itself s
9230: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
9240: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77  re allowed in 'w
9250: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20  hat-if'..       
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9270: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f        mode anyho
9280: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
9290: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
92c0: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62  ey = key.OpenSub
92d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
92e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
92f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
9300: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  subKey != null) 
9310: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
9320: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
9330: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9360: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c   subKey, whatIf,
9370: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9380: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
9390: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
93a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
93e0: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
93f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9430: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9440: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9450: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
9460: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9480: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b    key.CreateSubK
9490: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
94a0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
94b0: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
94c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
94d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
94e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9540: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
9550: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9560: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9570: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
9580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9590: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d   throwOnMissing.
95a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95b0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
95c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
95d0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
95e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
95f0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
9600: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
9610: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9620: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9640: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9650: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
9660: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
9680: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62  DeleteSubKey(sub
9690: 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  KeyName, throwOn
96a0: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
96b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
96c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
96d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9710: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9720: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9730: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
9740: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9750: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9790: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
97a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97b0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
97c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
97d0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
97e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
97f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9800: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
9810: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
9820: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9830: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
9840: 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75 62  teSubKeyTree(sub
9850: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  KeyName);..     
9860: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9870: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
98c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
98d0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c  c void DeleteVal
98e0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
98f0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
9900: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9910: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9920: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9930: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9950: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9960: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9970: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9980: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99a0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
99b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
99c0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c     key.DeleteVal
9a10: 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e  ue(name, throwOn
9a20: 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20  Missing);..     
9a30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9a40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9a90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9aa0: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
9ab0: 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20  bKeyNames()..   
9ac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9ae0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
9b30: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
9b40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
9b50: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
9b60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9b70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9bd0: 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63      public objec
9be0: 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  t GetValue(..   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9c00: 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
9c20: 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a  t defaultValue..
9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
9c70: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9c80: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9c90: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cb0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9cd0: 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28  rn key.GetValue(
9ce0: 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c  name, defaultVal
9cf0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
9d00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
9d10: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
9d60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
9d70: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
9d80: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
9d90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9da0: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9dc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9de0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
9df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9e00: 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75     return OpenSu
9e10: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
9e20: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
9e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9e90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9ea0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9eb0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9ed0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef0: 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d    bool writable.
9f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f10: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9f20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9f30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9f40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9f50: 20 20 20 20 20 20 20 69 66 20 28 77 72 69 74 61         if (writa
9f60: 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ble)..          
9f70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9f80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9fa0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fe0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9ff0: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
a000: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
a020: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
a030: 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61   ? false : writa
a040: 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ble);....       
a050: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
a060: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
a070: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
a080: 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b          new Mock
a090: 52 65 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b  RegistryKey(subK
a0a0: 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ey, whatIf, read
a0b0: 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75  Only, safe) : nu
a0c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
a0e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a120: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a130: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
a140: 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   SetValue(..    
a150: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a160: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
a170: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
a180: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
a190: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a1a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a1b0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
a1c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
a1e0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a200: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
a210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a220: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
a230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a240: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a260: 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28     key.SetValue(
a270: 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  name, value);.. 
a280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a290: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a2a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
a2b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a300: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a310: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
a320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a330: 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65  blic string Name
a340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a360: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
a370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a390: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a3c0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
a3e0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a400: 20 20 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e     return !Strin
a410: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
a420: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20  subKeyName) ?.. 
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
a450: 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c  rmat("{0}\\{1}",
a460: 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65   key.Name, subKe
a470: 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20  yName) :..      
a480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a490: 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20    key.Name;..   
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a520: 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79  private Registry
a530: 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  Key key;..      
a540: 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67        public Reg
a550: 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20  istryKey Key..  
a560: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a570: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
a580: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
a590: 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b  (); CheckSafe();
a5a0: 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a   return key; }..
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a620: 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 73  private string s
a630: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
a640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
a650: 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65  tring SubKeyName
a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a680: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a690: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
a6a0: 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20  ubKeyName; }..  
a6b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a6c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a720: 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49  ivate bool whatI
a730: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
a740: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74  public bool What
a750: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
a760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a770: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a780: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a790: 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20   whatIf; }..    
a7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a7b0: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
a7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a800: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a810: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c  ate bool readOnl
a820: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
a830: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64  public bool Read
a840: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
a850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a860: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
a870: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
a880: 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a  rn readOnly; }..
a890: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a900: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65  public bool safe
a910: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
a920: 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d  ublic bool Safe.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a950: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
a960: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61  sed(); return sa
a970: 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  fe; }..         
a980: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a990: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a9f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
aa00: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
aa10: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
aa20: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
aa30: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
aa40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
aa50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa60: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
aa70: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
aa80: 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64   "read-only" mod
aa90: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
aaa0: 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73 73 2e  ll write access.
aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
aac0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
aad0: 20 20 20 20 20 20 69 66 20 28 21 72 65 61 64 4f        if (!readO
aae0: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
aaf0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ab00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab10: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
ab20: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
ab30: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20  xception();..   
ab40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
abb0: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53  vate void CheckS
abc0: 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  afe()..         
abd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
abe0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
abf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
ac00: 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64  E: In "safe" mod
ac10: 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61  e, we disallow a
ac20: 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65 73 73  ll direct access
ac30: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..       
ac40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ac50: 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69    contained regi
ac60: 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20  stry key...     
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
ac90: 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20  f (!safe)..     
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
acb0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
acc0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
acd0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
ace0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
acf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
ad00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
ad10: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ad20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ad70: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
ad80: 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20  n System.Object 
ad90: 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20  Overrides..     
ada0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76         public ov
adb0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f  erride string To
adc0: 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20  String()..      
add0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ade0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
adf0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ae10: 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a  urn this.Name;..
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ae30: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ae40: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ae50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
aea0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
aeb0: 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73  Implicit Convers
aec0: 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20  ion Operators.. 
aed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
aee0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
aef0: 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f  GBUG: Remove me?
af00: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
af10: 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e   safe because in
af20: 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20   'what-if'..    
af30: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
af40: 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73     mode all keys
af50: 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64   are opened read
af60: 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  -only...        
af70: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
af80: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
af90: 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61  c implicit opera
afa0: 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28  tor RegistryKey(
afb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afc0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
afd0: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
afe0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
aff0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b010: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (key != null) ? 
b020: 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d  key.Key : null;.
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b050: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b060: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b0b0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b0c0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
b0d0: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b0f0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
b100: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
b110: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
b120: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
b130: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
b140: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b150: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
b160: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b180: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b190: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b1a0: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
b1b0: 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73  typeof(MockRegis
b1e0: 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a  tryKey).Name);..
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b260: 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65  private /* prote
b270: 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20  cted virtual */ 
b280: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20  void Dispose(.. 
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
b2a0: 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20  ool disposing.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
b2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2e0: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b310: 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
b320: 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20  osing)..        
b330: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20       // dispose 
b3a0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
b3b0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75     if (key != nu
b420: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
b460: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
b470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b480: 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c        key = null
b490: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b4a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b4d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b510: 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73         // releas
b520: 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f  e unmanaged reso
b530: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 20 2f 2f 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 20 4e 4f 54 45           // NOTE
b5b0: 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73  : This object is
b5c0: 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a   now disposed...
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70              disp
b600: 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  osed = true;..  
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b630: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b640: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b650: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b6a0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b6b0: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d   IDisposable Mem
b6c0: 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  bers..          
b6d0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69    public void Di
b6e0: 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  spose()..       
b6f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b700: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
b710: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
b720: 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72          GC.Suppr
b730: 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73  essFinalize(this
b740: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b750: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
b760: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
b770: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
b7d0: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63              ~Moc
b7f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
b800: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
b820: 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a  ispose(false);..
b830: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b840: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
b850: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
b860: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
b870: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b8d0: 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73     #region Regis
b8e0: 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d  tryHelper Class.
b8f0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
b900: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65   static class Re
b910: 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20  gistryHelper..  
b920: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b930: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b940: 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65  lic Static Prope
b950: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
b960: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
b970: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65  c int subKeysCre
b980: 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  ated;..         
b990: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
b9a0: 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61   int SubKeysCrea
b9b0: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
b9c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b9d0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
b9e0: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
b9f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ba00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ba10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ba20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ba60: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
ba70: 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65  ic int subKeysDe
ba80: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
ba90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
baa0: 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c  c int SubKeysDel
bab0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bac0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bad0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bae0: 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  n subKeysDeleted
baf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bb00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bb10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bb60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
bb70: 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65  tic int keyValue
bb80: 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  sSet;..         
bb90: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
bba0: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65   int KeyValuesSe
bbb0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bbd0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b    get { return k
bbe0: 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a  eyValuesSet; }..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc60: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
bc70: 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt keyValuesDele
bc80: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bc90: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bca0: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c  int KeyValuesDel
bcb0: 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  eted..          
bcc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bcd0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
bce0: 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  n keyValuesDelet
bcf0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
bd00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bd10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
bd70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
bd80: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
bd90: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
bda0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
bdb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
bdc0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
bdd0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
bde0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bdf0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
be00: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
be20: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
be30: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
be40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
be50: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
be60: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be70: 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  writable,..     
be80: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
be90: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
bea0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
beb0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
bec0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
bed0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bee0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
bef0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf10: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
bf20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bf30: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
bf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf50: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
bf60: 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69 74  bugAndTrace(writ
bf70: 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20  able ?..        
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf90: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
bfa0: 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69  ghest : TracePri
bfb0: 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20  ority.Higher,.. 
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfd0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
bfe0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
bff0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c000: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c020: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c030: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77  KeyName = {1}, w
c040: 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d  ritable = {2}",.
c050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c060: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c070: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c080: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c090: 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
c0b0: 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61 62  orDisplay(writab
c0c0: 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  le)), traceCateg
c0d0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c0e0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c100: 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72  HACK: Always for
c110: 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63 63  bid writable acc
c120: 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69  ess when operati
c130: 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  ng in..         
c140: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c150: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d  'what-if' mode..
c160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c170: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c180: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
c190: 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b  yKey key = rootK
c1a0: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey.OpenSubKey(..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20      subKeyName, 
c1d0: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a  whatIf ? false :
c1e0: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20   writable);.... 
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c200: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
c210: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
c220: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
c230: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b  ockRegistryKey(k
c240: 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  ey, whatIf, fals
c250: 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c  e, false) : null
c260: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
c270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
c2d0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
c2e0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
c2f0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
c300: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c310: 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67  c static MockReg
c320: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
c330: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c340: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
c350: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
c360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c370: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
c380: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
c390: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c3a0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c3b0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c3d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c3e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c3f0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
c400: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c420: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c440: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c460: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
c470: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
c480: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
c4b0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
c4c0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c4d0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f               "ro
c4f0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62  otKey = {0}, sub
c500: 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d  KeyName = {1}",.
c510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c520: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
c530: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f  lay(rootKey), Fo
c540: 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e  rDisplay(subKeyN
c550: 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
c580: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c590: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
c5a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c5d0: 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20         // HACK: 
c5e0: 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65  Always open a ke
c5f0: 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  y, rather than c
c600: 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e  reating one when
c610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c620: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
c630: 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77 68 61  perating in 'wha
c640: 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if' mode...   
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c670: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
c680: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
c690: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
c6e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
c6f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
c700: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20    If..          
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c720: 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69 6c         this fail
c730: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
c740: 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f  y return the roo
c750: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
c760: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c770: 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73      key itself s
c780: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
c790: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20  re allowed in.. 
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c7c0: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 61  'what-if' mode a
c7d0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c800: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c810: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
c820: 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75  = rootKey.OpenSu
c830: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
c840: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c860: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c870: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52   key : new MockR
c8a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
c8d0: 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  tKey, subKeyName
c8e0: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c8f0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c920: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c950: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c960: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
c970: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74     rootKey.Creat
c9a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
c9b0: 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  me), whatIf, fal
c9c0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
ca00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ca20: 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74      subKeysCreat
ca60: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
ca70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ca80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ca90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cae0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
caf0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cb00: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
cb10: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cb20: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cb30: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cb40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
cb50: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
cb60: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
cb80: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
cb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cba0: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
cbb0: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
cbc0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
cbd0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
cbe0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
cbf0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
cc00: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
cc10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
cc20: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
cc30: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
cc60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
cc70: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
cc90: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
cca0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
ccb0: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
cce0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
ccf0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
cd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd10: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
cd20: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
cd30: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
cd60: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
cd70: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
cd80: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
cda0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdc0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
cdf0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
ce00: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
ce10: 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g);....         
ce20: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
ce30: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
ce40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ce50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ce60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cea0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
ceb0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
cec0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
ced0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
cee0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
cef0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
cf00: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
cf10: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
cf20: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
cf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf40: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
cf50: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
cf60: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cf70: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
cf80: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
cf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cfa0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cfb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
cfc0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cfd0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cff0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
d000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
d010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
d020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
d030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
d040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
d050: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
d080: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
d090: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0b0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
d0c0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
d0d0: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
d100: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
d110: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
d120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d130: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
d140: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d160: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
d190: 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e  bKeyTree(subKeyN
d1a0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
d1b0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
d1c0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
d1d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d1e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d230: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d240: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d250: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d260: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d270: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d280: 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75  c string[] GetSu
d290: 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20  bKeyNames(..    
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
d2b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
d2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d2d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d360: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d370: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d380: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d390: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d3a0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d3b0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d3c0: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d3e0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d3f0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d400: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46    "key = {0}", F
d430: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c  orDisplay(key)),
d440: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d460: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d470: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
d480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d490: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d4e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d4f0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d500: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d510: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d520: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d530: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47   static object G
d540: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
d550: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d560: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
d5a0: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75  ject defaultValu
d5b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d5c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5e0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d620: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
d630: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d640: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d650: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
d660: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
d670: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
d680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
d690: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
d6a0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
d6b0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
d6d0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
d6e0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
d6f0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d710: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
d720: 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61  name = {1}, defa
d730: 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c  ultValue = {2}",
d740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d750: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d760: 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69  play(key), ForDi
d770: 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20  splay(name),..  
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
d7a0: 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c  (defaultValue)),
d7b0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
d7c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d7d0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
d7e0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
d7f0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
d800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
d810: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
d820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
d860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
d870: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
d880: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
d890: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
d8a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
d8b0: 74 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  tic void SetValu
d8c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d8d0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
d8e0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
d8f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d900: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
d910: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
d920: 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alue,..         
d930: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d940: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d950: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d960: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d970: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d980: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d990: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
d9a0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
d9b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d9c0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
d9d0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d9e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d9f0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
da00: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
da10: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
da20: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
da40: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
da50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
da60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da80: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
da90: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c   name = {1}, val
daa0: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
dad0: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
dae0: 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61  name), ForDispla
daf0: 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20  y(value)),..    
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
db20: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
db30: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
db40: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
db50: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74           key.Set
db60: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75  Value(name, valu
db70: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
db80: 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73         keyValues
db90: 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  Set++;..        
dba0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
dbb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
dbc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dbf0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
dc00: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
dc10: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
dc20: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
dc30: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
dc40: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
dc50: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
dc60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
dc80: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
dc90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
dca0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
dcb0: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
dcc0: 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
dcd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
dce0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
dcf0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
dd00: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
dd10: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
dd20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
dd40: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
dd60: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
dd70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
dd80: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
dda0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
ddb0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
ddc0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
ddf0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
de00: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
de10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de20: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
de30: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22  {0}, name = {1}"
de40: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79  , ForDisplay(key
de50: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
de60: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
de70: 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74  isplay(name)), t
de80: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
de90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dea0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61      key.DeleteVa
ded0: 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f  lue(name, throwO
dee0: 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  nMissing);....  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
df00: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b  yValuesDeleted++
df10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
df30: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
df40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
df50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
df60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
df70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
df90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
dfb0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74        #region St
dfc0: 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a  ringList Class..
dfd0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
dfe0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
dff0: 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73  ingList : List<s
e000: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e020: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
e030: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
e040: 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20      : base()..  
e050: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e070: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
e080: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e090: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
e0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
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 49  lic StringList(I
e100: 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e  Enumerable<strin
e110: 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a  g> collection)..
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f  : base(collectio
e140: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e160: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
e170: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
e180: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
e190: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
e1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
e200: 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74  egion StringDict
e210: 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20  ionary Class..  
e220: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e230: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e240: 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69  gDictionary : Di
e250: 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
e260: 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20   string>..      
e270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e280: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69   public StringDi
e290: 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20  ctionary()..    
e2a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e2b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e2c0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e2d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e2e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
e2f0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
e300: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
e360: 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d  rsionList Class.
e370: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
e380: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65   sealed class Ve
e390: 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74  rsionList : List
e3a0: 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20  <Version>..     
e3b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e3c0: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
e3d0: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
e3e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
e3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e490: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
e4a0: 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c  ist(IEnumerable<
e4b0: 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74  Version> collect
e4c0: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e4d0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c        : base(col
e4e0: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
e4f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e500: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e510: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e530: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e540: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e550: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e590: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e5a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e5b0: 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20  ionMap Class..  
e5c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e5d0: 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69  aled class Versi
e5e0: 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61  onMap : Dictiona
e5f0: 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69  ry<string, Versi
e600: 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20  onList>..       
e610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e620: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61  public VersionMa
e630: 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  p()..           
e640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e650: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e660: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e670: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e680: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e6f0: 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43  region Package C
e700: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e  lass..        in
e710: 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c  ternal sealed cl
e720: 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20  ass Package..   
e730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e740: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e750: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
e760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e770: 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20  lic Package().. 
e780: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e7a0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
e7b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e7c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
e7d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
e7e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e830: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
e840: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
e850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e860: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
e870: 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  e assemblyName;.
e880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e890: 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  lic AssemblyName
e8a0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20   AssemblyName.. 
e8b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e8d0: 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65 6d  t { return assem
e8e0: 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  blyName; }..    
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
e900: 7b 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  { assemblyName =
e910: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
e920: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e930: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e980: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e990: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
e9a0: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
e9b0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e9c0: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
e9d0: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
e9e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e9f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ea00: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
ea10: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ea30: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
ea40: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
ea50: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ea60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ea70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ea80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eac0: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ead0: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
eae0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
eaf0: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
eb00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
eb30: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
eb40: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
eb50: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
eb60: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eb70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
eb80: 20 20 20 20 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 2f  ////////////////
eba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ebc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ebd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ebe0: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ec00: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
ec10: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ec20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec30: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
ec40: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
ec60: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
ec70: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
ec80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ec90: 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
ece0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ecf0: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
ed00: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ed10: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ed20: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
ed30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ed40: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ed50: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
ed60: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
ed70: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
ed80: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
ed90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
eda0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
edb0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ee00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
ee10: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
ee20: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
ee30: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
ee40: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
ee50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
ee70: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
ee80: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
eea0: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
eeb0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
eec0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
eed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ef20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ef30: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
ef40: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
ef50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ef60: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
ef70: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
ef80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef90: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
efa0: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
efb0: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
efd0: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
efe0: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
eff0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f010: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f030: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f040: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f090: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f0a0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f0b0: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f0c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f0d0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f0e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f0f0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f100: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f120: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f130: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f140: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f150: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f160: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f1d0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f1e0: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f1f0: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f210: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f220: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f230: 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  };..            
f240: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
f250: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
f2b0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
f2c0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
f2d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43         private C
f2e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
f300: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f320: 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c     string logFil
f330: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
f340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
f350: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
f360: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f370: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
f380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f390: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
f3a0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
f3b0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
f3c0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d  signerFileName,.
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3e0: 20 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79   string registry
f3f0: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
f400: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f410: 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d   configVersion,.
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f430: 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f   string vsVersio
f440: 6e 53 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20  nSuffix,..      
f450: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f460: 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20   debugFormat,.. 
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f480: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
f490: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f4a0: 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
f4b0: 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a   installFlags,..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
f4e0: 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  bugPriority,..  
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f500: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
f510: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
f520: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f530: 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
f540: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f550: 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20  install,..      
f560: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
f570: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
f580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75         bool noRu
f590: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f5b0: 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a  ool noDesktop,..
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d  bool noCompact,.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5f0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c   bool noNetFx20,
f600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f610: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35    bool noNetFx35
f620: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f630: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34     bool noNetFx4
f640: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
f650: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
f660: 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45,..           
f670: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
f680: 78 34 35 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  x451,..         
f690: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6a0: 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20  2005,..         
f6b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6c0: 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20  2008,..         
f6d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f6e0: 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  2010,..         
f6f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f700: 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20 20  2012,..         
f710: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73         bool noVs
f720: 32 30 31 33 2c 0d 0a 20 20 20 20 20 20 20 20 20  2013,..         
f730: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72         bool noTr
f740: 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ace,..          
f750: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e        bool noCon
f760: 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sole,..         
f770: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f         bool noLo
f780: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
f790: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
f7a0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
f7b0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
f7c0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
f7d0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62          bool deb
f7e0: 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug,..           
f7f0: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
f800: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
f810: 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d      bool confirm
f820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f830: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
f840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f850: 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c      this.assembl
f860: 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20  y = assembly;.. 
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f880: 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  his.logFileName 
f890: 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a  = logFileName;..
f8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8b0: 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d  this.directory =
f8c0: 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f8e0: 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  s.coreFileName =
f8f0: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  this.linqFileNam
f920: 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  e = linqFileName
f930: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f940: 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72     this.designer
f950: 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67  FileName = desig
f960: 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f980: 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73 69  is.registryVersi
f990: 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65 72  on = registryVer
f9a0: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
f9b0: 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66         this.conf
f9c0: 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e 66  igVersion = conf
f9d0: 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  igVersion;..    
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
f9f0: 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78  .vsVersionSuffix
fa00: 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66   = vsVersionSuff
fa10: 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix;..           
fa20: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
fa30: 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
fa40: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
fa50: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
fa60: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
fa70: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
fa80: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
fa90: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
faa0: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
fab0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
fac0: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
fad0: 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
faf0: 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
fb00: 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
fb10: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
fb20: 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65 72      this.perUser
fb30: 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20   = perUser;..   
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fb50: 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74  s.install = inst
fb60: 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
fb70: 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34        this.wow64
fb80: 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20   = wow64;..     
fb90: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fba0: 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
fbb0: 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   = noRuntimeVers
fbc0: 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
fbd0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73        this.noDes
fbe0: 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70  ktop = noDesktop
fbf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fc00: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63     this.noCompac
fc10: 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  t = noCompact;..
fc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc30: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  this.noNetFx20 =
fc40: 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fc60: 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e 6f  s.noNetFx35 = no
fc70: 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20  NetFx35;..      
fc80: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fc90: 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74  oNetFx40 = noNet
fca0: 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
fcb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
fcc0: 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx45 = noNetFx4
fcd0: 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
fce0: 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
fcf0: 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35 31  451 = noNetFx451
fd00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fd10: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 35     this.noVs2005
fd20: 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20   = noVs2005;..  
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fd40: 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f  is.noVs2008 = no
fd50: 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20  Vs2008;..       
fd60: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fd70: 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31  Vs2010 = noVs201
fd80: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
fd90: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31      this.noVs201
fda0: 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20  2 = noVs2012;.. 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fdc0: 68 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20 6e  his.noVs2013 = n
fdd0: 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20 20  oVs2013;..      
fde0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fdf0: 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
fe00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fe10: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
fe20: 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe40: 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
fe50: 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
fe60: 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f       this.throwO
fe70: 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77  nMissing = throw
fe80: 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20  OnMissing;..    
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fea0: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
feb0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fec0: 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20     this.debug = 
fed0: 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  debug;..        
fee0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72          this.ver
fef0: 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d  bose = verbose;.
ff00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff10: 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20   this.confirm = 
ff20: 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20  confirm;..      
ff30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ff40: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
ff50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
ff60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ffa0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
ffb0: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
ffc0: 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  e Static Methods
ffd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
ffe0: 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
fff0: 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65  d GetDefaultFile
10000 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
10010 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10020 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10040 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  ef string coreFi
10050 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
10060 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
10070 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
10080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10090 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65     ref string de
100a0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a  signerFileName..
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
100d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
100e0 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62    if (thisAssemb
100f0 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
10120 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
10130 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
10140 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68  DirectoryName(th
10150 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  isAssembly.Locat
10160 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
10170 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
10180 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10190 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
101d0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
101e0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
101f0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
10200 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
10210 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ler.CoreFileName
10220 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10230 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
10240 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
10250 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71    Installer.Linq
10280 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
102a0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
102b0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
102c0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
102e0 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
102f0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
10300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
10310 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
10320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10360 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
10370 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
10380 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20  CheckOption(..  
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
103a0 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20  f string arg..  
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
103c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
103f0 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
10400 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
10410 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
10420 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  y(result))..    
10430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10470 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c  TE: Remove all l
10480 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68  eading switch ch
10490 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ars...          
104a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c    result = resul
104d0 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74  t.TrimStart(Swit
104e0 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20  chChars);....   
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10510 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
10520 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73  : How many chars
10530 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a   were removed?..
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10560 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
10570 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67  count = arg.Leng
10580 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67  th - result.Leng
10590 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
105a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20     // NOTE: Was 
105d0 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f  there at least o
105e0 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne?..           
105f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d   if (count > 0).
10620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10630 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
10660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10670 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65  OTE: Ok, replace
10680 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d   their original.
10690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
106b0 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20    argument...   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106f0 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a   arg = result;..
10700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10710 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59        // NOTE: Y
10740 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77  es, this is a sw
10750 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  itch...         
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10770 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10780 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10790 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
107d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
107e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
107f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10800 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10840 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10850 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10860 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74  ic bool MatchOpt
10870 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
10880 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
10890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
108a0 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e     string option
108b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
108c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
108d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
108e0 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20      if ((arg == 
108f0 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e  null) || (option
10900 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
10930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10940 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43   return String.C
10950 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f  ompare(arg, 0, o
10960 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20  ption, 0,..     
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
10980 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e  rg.Length, Strin
10990 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
109a0 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
109b0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
109c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
109d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
109e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
109f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10a20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10a30 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65  atic bool? Parse
10a40 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20  Boolean(..      
10a50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10a60 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20   text..         
10a70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10a90 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
10aa0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
10ab0 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
10ac0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d    bool value;...
10af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b00 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72       if (bool.Tr
10b10 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74  yParse(text, out
10b20 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
10b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
10b80 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
10b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10ba0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
10bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10be0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
10bf0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
10c00 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45  ic object ParseE
10c10 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
10c20 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54        Type enumT
10c30 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ype,..          
10c40 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
10c50 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
10c60 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d      bool noCase.
10c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c80 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10c90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10ca0 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65     if ((enumType
10cb0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e   == null) || !en
10cc0 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a  umType.IsEnum)..
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ce0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
10cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10d00 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
10d10 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
10d20 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
10d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
10d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10d60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d80 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72   return Enum.Par
10d90 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78  se(enumType, tex
10da0 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20  t, noCase);..   
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10dd0 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10e10 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10e40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
10e50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10e60 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
10e70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10e80 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
10e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10ef0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
10f00 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
10f10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
10f20 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75  c static Configu
10f30 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66  ration CreateDef
10f40 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20  ault()..        
10f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10f60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
10f70 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
10f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f90 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
10fa0 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  Name = null;..  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10fc0 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
10fd0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
10fe0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10ff0 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
11000 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
11020 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
11030 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
11040 20 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65          ref dire
11050 63 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46  ctory, ref coreF
11060 69 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e  ileName, ref lin
11070 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  qFileName,..    
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 72 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ref designerFile
110a0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
110b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
110c0 20 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69   new Configurati
110d0 6f 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  on(thisAssembly,
110e0 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
110f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11100 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
11110 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ame, linqFileNam
11120 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  e, designerFileN
11130 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ame, null, null,
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11150 20 20 20 20 20 20 6e 75 6c 6c 2c 20 54 72 61 63        null, Trac
11160 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74  eOps.DebugFormat
11170 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65  , TraceOps.Trace
11180 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
111a0 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c  tallFlags.Defaul
111b0 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  t, TracePriority
111c0 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20  .Default,..     
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
111e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
111f0 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75  ault, false, tru
11200 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
11210 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
11230 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11240 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
11250 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
11260 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
11270 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
11280 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
11290 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
112a0 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 0d  se, true, true,.
112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112c0 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
112d0 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
112e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
112f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
11300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11340 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
11350 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
11360 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
11370 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
11380 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
11390 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28  c bool FromArgs(
113a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113b0 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
113c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
113d0 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ref Configuratio
11400 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
11410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11420 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
11430 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
11440 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
11450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11460 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
11470 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11490 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
114a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
114c0 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
114f0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
11520 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69  on = Configurati
11530 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74  on.CreateDefault
11540 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
11550 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
11560 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e  ength = args.Len
11570 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
11580 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
11590 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
115a0 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
115b0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
115d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
115f0 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  arg = args[index
11600 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11630 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11640 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75  E: Skip any argu
11650 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c  ment that is nul
11660 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74  l (?) or an empt
11670 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
11680 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11690 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...   
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116d0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
116e0 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
116f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
11710 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11750 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f   NOTE: We are go
11760 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ing to modify th
11770 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
11780 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
117a0 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e        by removin
117b0 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70  g any leading op
117c0 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b  tion characters;
117d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
117f0 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65     therefore, we
11800 20 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e   use a new strin
11810 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20  g to hold the.. 
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11840 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e  modified argumen
11850 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
11860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11880 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
11890 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118d0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
118e0 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
118f0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
11900 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e    //       begin
11930 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20   with an option 
11940 63 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20  character (e.g. 
11950 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20  a minus..       
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72   //       or for
11980 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74  ward slash); att
11990 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65  empt to validate
119a0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..         
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
119c0 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66  /       now.  If
119d0 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69   we fail in stri
119e0 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20  ct mode, we are 
119f0 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  done;..         
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11a10 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  /       otherwis
11a20 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69  e, just skip thi
11a30 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  s argument and a
11a40 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20  //       to the 
11a70 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  next one...     
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11ab0 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28  f (!CheckOption(
11ac0 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
11b10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
11b20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11b50 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
11b60 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11b90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
11ba0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
11bd0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11be0 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b  line argument: {
11bf0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c10 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
11c20 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
11c30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
11c60 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
11c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c80 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11c90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11d10 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
11d20 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11d30 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
11d40 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11d50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11d60 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65      have a value
11d70 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74  ; therefore, att
11d80 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d  empt to advance.
11d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11da0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11db0 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
11dc0 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
11dd0 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11e00 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
11e10 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e  if (index >= len
11e40 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11e80 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
11e90 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11ec0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11ed0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
11ee0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11f10 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f40 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
11f50 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
11f60 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
11f90 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
11fa0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
11fd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
12000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12070 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
12080 3a 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75  : Grab the textu
12090 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  al value of this
120a0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
120d0 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12110 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b  ing text = args[
12120 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12160 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
12170 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
12180 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
12190 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
121b0 20 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e         (based on
121c0 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20   a partial name 
121d0 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20  match) and then 
121e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12200 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72        to interpr
12210 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  et the textual v
12220 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72  alue as the corr
12230 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12250 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20        type...   
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
122a0 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67  (newArg, "config
122b0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12300 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d  .configVersion =
12310 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12340 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12350 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12360 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d  newArg, "confirm
12370 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
123b0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
123c0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
123d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
123f0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12450 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12490 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
124a0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
124d0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
124e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
12520 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
12530 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
12560 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12570 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
125b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12610 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
12690 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  firm = (bool)val
126a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
126e0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
126f0 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61  Arg, "coreFileNa
12700 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12740 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
12750 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
12760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12770 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
127a0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
127b0 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20  , "debug"))..   
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
12800 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
12810 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
12840 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
12890 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
128a0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
128d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
128e0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
128f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12910 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12920 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12930 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
12960 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
12970 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
129b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
129c0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
129f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12a20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12a50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12a80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12ad0 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f  tion.debug = (bo
12ae0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12b20 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12b30 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
12b40 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  gFormat"))..    
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12b90 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74  .debugFormat = t
12ba0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
12bd0 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
12be0 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
12bf0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
12c30 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12c40 41 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72  Arg, "debugPrior
12c50 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
12c90 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
12ca0 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
12cd0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
12ce0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
12cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12d10 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12d70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12db0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
12dc0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12df0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12e00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e30 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
12e40 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12e80 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12e90 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12ec0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12ef0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12f00 20 20 20 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 72 65                re
12f20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12f50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12fa0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
12fb0 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
12fc0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12ff0 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .DebugPriority =
13000 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
13010 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13060 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13070 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13080 22 29 29 0d 0a 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 7b 0d 0a               {..
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
130c0 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
130d0 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
130e0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
130f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13120 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13130 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
13140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13180 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
13190 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
131e0 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
131f0 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
13200 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
13230 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
13240 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
13250 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
13280 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
132d0 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
132e0 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
132f0 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
13320 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
13330 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
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 20 20 63                 c
13360 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
13370 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
13380 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
13390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
133b0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
133c0 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
133d0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
13400 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
13410 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
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 20 20 63 6f 6e 66              conf
13440 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
13450 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
13460 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13490 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
134a0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
134b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
134d0 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
134e0 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
134f0 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
13500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
13530 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
13540 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
13570 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
13580 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
13590 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
135c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
135d0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
135e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
13610 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
13620 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13650 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
13660 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
13670 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
136a0 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
136b0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
136e0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
136f0 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
13700 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
13710 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
13740 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
13750 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
13760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
13790 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
137a0 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c  Name(designerFil
137b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
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 69 66 20 28 53 74 72 69 6e         if (Strin
137e0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
137f0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13800 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
13830 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
13840 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
13850 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13880 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13890 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
138a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
138d0 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67  directory, desig
138e0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13900 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13930 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13940 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20  install"))..    
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13990 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
139a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
139d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13a20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13a30 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13a60 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13a70 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13a80 0d 0a 20 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 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13ab0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13ac0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ae0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13af0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13b00 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13b40 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13b50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13b80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13bb0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13be0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13c10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13c60 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62  ion.install = (b
13c70 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13cb0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13cc0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
13cd0 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20  tallFlags"))..  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d10 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
13d20 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c  typeof(InstallFl
13d60 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ags), text, true
13d70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
13da0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
13df0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13e00 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
13e30 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
13e40 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13e80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
13e90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
13ec0 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61  install flags va
13ed0 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
13f10 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
13f20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13f50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13f80 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13fb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
14000 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
14010 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
14020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14030 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
14060 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
14070 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  g, "linqFileName
14080 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
140c0 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
140d0 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
14120 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
14130 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "logFileName")).
14140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14150 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14180 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
14190 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
141d0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
141e0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
141f0 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20  mpact"))..      
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14240 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
14250 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
14280 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
142d0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
142e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14310 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14320 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14360 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
14370 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
143a0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
143b0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
143e0 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
143f0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14430 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
14460 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
14470 20 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 72 65 74 75 72             retur
14490 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
144c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14510 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62  n.noCompact = (b
14520 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14560 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
14570 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43  ion(newArg, "noC
14580 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20  onsole"))..     
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
145d0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
145e0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14610 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14630 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
14660 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
14670 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
146a0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
146b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
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 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
146f0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14700 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
14730 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
14740 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
14770 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
14780 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
14790 29 2c 0d 0a 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 20                  
147b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
147c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
147f0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
14820 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
14830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14850 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
148a0 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28  on.noConsole = (
148b0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14900 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
14910 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20  Desktop"))..    
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
14960 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
14970 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
149a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
149f0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14a00 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14a30 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14a40 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14a50 0d 0a 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 20 20 20 20 20                  
14a70 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14a80 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
14a90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14ac0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14ad0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14b10 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14b20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14b50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14b80 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14bb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14be0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14c30 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  ion.noDesktop = 
14c40 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
14c90 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
14ca0 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14cf0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14d00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14d30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14d80 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14d90 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
14dc0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
14dd0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14e10 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14e50 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14e60 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14e90 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14ea0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ed0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14ee0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14f10 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 72 65 74 75 72 6e            return
14f40 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
14f70 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14fc0 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76  .noLog = (bool)v
14fd0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15000 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15010 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15020 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32  ewArg, "noNetFx2
15030 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
15070 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15080 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
150b0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
150c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
150e0 0a 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 20 20 20 20 20                  
15100 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15110 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15140 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15150 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15160 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
151a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151d0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
151e0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
151f0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15220 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15230 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15270 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
152a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
152d0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
15300 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15350 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
15360 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15390 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
153a0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
153b0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
153c0 33 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  35"))..         
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
153e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
15400 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15410 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15440 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
15450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15470 0d 0a 20 20 20 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
154a0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
154b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 54 72 61 63 65 50 72 69 6f         TracePrio
154e0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
154f0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15530 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
15570 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
15580 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {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 46 6f 72 44 69             ForDi
155b0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
155c0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15600 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
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 69 66 20 28 73 74 72 69 63         if (stric
15630 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
15660 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
15670 20 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 63 6f 6e 74 69 6e 75           continu
15690 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
156e0 6f 4e 65 74 46 78 33 35 20 3d 20 28 62 6f 6f 6c  oNetFx35 = (bool
156f0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15720 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15730 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15740 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
15750 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x40"))..        
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
15790 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
157a0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
157b0 0d 0a 0d 0a 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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
157e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
15830 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
15840 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 54 72 61 63 65 50 72 69          TracePri
15870 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
15880 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
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 20 20 20                  
158b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
158c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
158d0 0a 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15900 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
15910 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
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 20 20 46 6f 72 44              ForD
15940 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
15950 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
15960 0a 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 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
15990 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
159c0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
159f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a10 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
15a20 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15a70 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f  noNetFx40 = (boo
15a80 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15ac0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15ad0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
15ae0 46 78 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20  Fx45"))..       
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
15b30 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
15b40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
15b70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
15bc0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
15bd0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 54 72 61 63 65 50 72           TracePr
15c00 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
15c10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15c50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
15c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
15c90 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
15ca0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
15cd0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
15ce0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
15cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
15d20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
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 20 69 66 20 28 73 74 72           if (str
15d50 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15d80 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
15db0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
15e00 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f  .noNetFx45 = (bo
15e10 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
15e50 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
15e60 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
15e70 74 46 78 34 35 31 22 29 29 0d 0a 20 20 20 20 20  tFx451"))..     
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
15ec0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
15ed0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
15f00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
15f50 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15f60 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
15f90 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
15fa0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
15fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15fe0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
15ff0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
16020 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
16030 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16060 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
16070 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
16080 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
160b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 69 66 20 28 73             if (s
160e0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16110 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16140 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16190 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20  on.noNetFx451 = 
161a0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
161f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
16200 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22  oRuntimeVersion"
16210 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
16250 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16260 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16290 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
162e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
162f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16330 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16340 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16370 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16380 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
163c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
163d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16400 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
16410 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
164b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
164e0 0a 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 20 20 20 20 7d 0d 0a               }..
16500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16520 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
16530 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 28  ntimeVersion = (
16540 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16590 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
165a0 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20 20 20  Trace"))..      
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
165f0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
16600 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
16630 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
16680 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
16690 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
166c0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
166d0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16710 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
16720 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
16750 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
16760 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16790 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
167a0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
167b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
167e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
16810 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
16840 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
16870 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168b0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
168c0 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f  n.noTrace = (boo
168d0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168f0 20 20 7d 0d 0a 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 65 6c 73               els
16910 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
16920 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
16930 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  005"))..        
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
16970 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
16980 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
16990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
169c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
16a10 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
16a20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
16a50 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
16a60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
16a70 20 20 20 20 20 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 20 20 20                  
16a90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
16aa0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
16ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
16ae0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
16af0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b10 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16b20 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
16b30 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
16b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16b70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
16ba0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 72 65 74 75 72 6e 20           return 
16bd0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16c00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16c50 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f 6f 6c  noVs2005 = (bool
16c60 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 7d 0d 0a 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 65 6c 73 65              else
16ca0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16cb0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
16cc0 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  08"))..         
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
16d00 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
16d10 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
16d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16d40 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
16d50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16da0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16db0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
16de0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
16df0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
16e00 20 20 20 20 20 20 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 20 20                  
16e20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16e30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16e70 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16e80 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16eb0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16ec0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
16f00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
16f30 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
16f60 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16f90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
16fe0 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c 29  oVs2008 = (bool)
16ff0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 7d 0d 0a 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 65 6c 73 65 20             else 
17030 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17040 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
17050 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17090 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
170a0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
170b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
170d0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
170e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
17130 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
17140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17170 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17180 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
171c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17200 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
17210 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
17240 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
17250 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17290 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
172c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
172f0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17320 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17370 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76  Vs2010 = (bool)v
17380 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
173a0 0d 0a 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 65 6c 73 65 20 69            else i
173c0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
173d0 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 32  ewArg, "noVs2012
173e0 22 29 29 0d 0a 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 7b 0d 0a               {..
17400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17410 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
17420 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17430 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
17440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17460 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
174c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
174d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17500 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17510 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17540 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17550 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17590 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
175a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
175d0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
175e0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
17620 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
17650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
17680 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176a0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
176b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
176d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
176f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
17700 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29 76 61  s2012 = (bool)va
17710 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17730 0a 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 65 6c 73 65 20 69 66           else if
17750 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
17760 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 33 22  wArg, "noVs2013"
17770 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
177b0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
177c0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
177f0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17840 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17850 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17890 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
178a0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
178d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
178e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17920 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
17930 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
17960 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17970 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
179b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
179e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
17a10 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17a80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
17a90 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2013 = (bool)val
17aa0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
17ae0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17af0 41 72 67 2c 20 22 70 65 72 55 73 65 72 22 29 29  Arg, "perUser"))
17b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
17b40 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
17b50 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
17b80 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17bd0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
17be0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17c20 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17c30 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17c60 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17c70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17ca0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
17cb0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ce0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
17cf0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
17d00 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17d30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
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 7d 0d 0a 0d 0a             }....
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17e10 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55 73 65  iguration.perUse
17e20 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  r = (bool)value;
17e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17e70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17e80 2c 20 22 72 65 67 69 73 74 72 79 56 65 72 73 69  , "registryVersi
17e90 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  on"))..         
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17ed0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69  nfiguration.regi
17ee0 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65  stryVersion = te
17ef0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
17f30 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17f40 41 72 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d  Arg, "strict")).
17f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
17f90 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
17fa0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
17fd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18020 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
18030 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
18070 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
18080 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
180b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
180c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
180f0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18100 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18130 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18140 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18150 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18180 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
181f0 0a 0d 0a 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 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
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 20 2f 2f 0d 0a 20             //.. 
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18280 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f  TE: Allow the co
18290 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d  mmand line argum
182a0 65 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  ents to..       
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76       //       ov
182d0 65 72 72 69 64 65 20 74 68 65 20 22 73 74 72 69  erride the "stri
182e0 63 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d  ctness" setting.
182f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18310 20 20 20 20 20 20 70 72 6f 76 69 64 65 64 20 62        provided b
18320 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller... 
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63             stric
18370 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  t = (bool)value;
18380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
183c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
183d0 2c 20 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  , "throwOnMissin
183e0 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  g"))..          
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18410 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
18420 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
18430 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
18440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18460 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
18470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184b0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
184c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
184d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184f0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18500 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18510 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
18550 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18590 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
185a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
185d0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
185e0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
18620 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
18650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
18680 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
186b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
186d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68  configuration.th
18700 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28  rowOnMissing = (
18710 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
18760 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72  tion(newArg, "tr
18770 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20  aceFormat"))..  
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
187c0 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d  on.traceFormat =
187d0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
18800 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69  ceFormat = confi
18810 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f  guration.traceFo
18820 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18840 0d 0a 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 65 6c 73 65 20 69            else i
18860 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18870 65 77 41 72 67 2c 20 22 74 72 61 63 65 50 72 69  ewArg, "tracePri
18880 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20  ority"))..      
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
188d0 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
18900 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  of(TracePriority
18910 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d  ), text, true);.
18920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18940 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18950 29 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 7b                 {
18970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
189a0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
189b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
189e0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
189f0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18a30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
18a70 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
18ab0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
18ac0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
18af0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18b20 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
18b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
18bd0 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
18be0 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69  rity = (TracePri
18bf0 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20  ority)value;..  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
18c20 70 73 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79  ps.TracePriority
18c30 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
18c40 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d  .tracePriority;.
18c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18c90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18ca0 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20   "verbose"))..  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
18cf0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
18d00 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
18d30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
18d80 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
18d90 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
18dc0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
18dd0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
18de0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
18e10 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
18e20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
18e50 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
18e60 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
18ea0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
18eb0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18ee0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18f10 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18f40 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
18fc0 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20  ation.verbose = 
18fd0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
19020 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76  ption(newArg, "v
19030 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 29  sVersionSuffix")
19040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19050 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19080 75 72 61 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f  uration.vsVersio
19090 6e 53 75 66 66 69 78 20 3d 20 74 65 78 74 3b 0d  nSuffix = text;.
190a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
190e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
190f0 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20   "whatIf"))..   
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19140 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
19150 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19180 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
191d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
191e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19210 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
19220 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
19230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
19260 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
19270 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19290 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
192a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
192b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192e0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
192f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19300 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
19330 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19360 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 72 65                re
19390 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
193c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19410 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62  tion.whatIf = (b
19420 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19460 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
19470 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f 77  ion(newArg, "wow
19480 36 34 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  64"))..         
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
194a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
194c0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
194d0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
194e0 0a 0d 0a 20 20 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 69                 i
19500 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
19510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
19560 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
19570 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
195a0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
195b0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
195f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
19630 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
19640 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19670 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19680 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
196c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
196f0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
19720 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
19750 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77   configuration.w
197a0 6f 77 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  ow64 = (bool)val
197b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
197f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19800 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
19830 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19840 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19870 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19880 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
198b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
198c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
198f0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
19900 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d  line option: {0}
19910 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
19940 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
19950 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
19980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
199b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
199f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19a00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
19a10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19a20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
19a30 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a60 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
19a70 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
19a80 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
19a90 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
19ab0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
19ac0 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
19ad0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19af0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
19b00 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63  iled to modify c
19b10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
19b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19b40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19b50 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
19b60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19b70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19bc0 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
19bd0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
19be0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
19bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19c00 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
19c10 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
19c20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
19c30 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
19c40 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
19c50 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
19c60 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
19c70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
19c80 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
19c90 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
19ca0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
19cb0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19cd0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d00 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
19d10 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
19d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
19d60 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
19d70 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
19d80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19d90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
19da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19dc0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
19dd0 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66   assembly = conf
19de0 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62  iguration.assemb
19df0 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ly;....         
19e00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
19e10 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
19e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
19e60 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20  d assembly.";.. 
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
19e90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
19ea0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ec0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
19ed0 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a  ation.noTrace)..
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19f10 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
19f20 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49          String.I
19f50 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
19f60 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
19f70 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 2f 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68   // NOTE: Use th
19fe0 65 20 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69  e default log fi
19ff0 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...      
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a040 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  ion.logFileName 
1a050 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65  = GetLogFileName
1a060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20     "trace");..  
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1a120 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f  guration.noConso
1a130 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le)..           
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a190 4f 54 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20  OTE: In verbose 
1a1a0 6d 6f 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70  mode, debug outp
1a1b0 75 74 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a  ut (that meets..
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a1e0 20 20 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75       the configu
1a1f0 72 65 64 20 70 72 69 6f 72 69 74 79 20 63 72 69  red priority cri
1a200 74 65 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a  teria) will be..
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a230 20 20 20 20 20 64 69 73 70 6c 61 79 65 64 20 74       displayed t
1a240 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f  o the console; o
1a250 74 68 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d  therwise, trace.
1a260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a280 20 20 20 20 20 20 6f 75 74 70 75 74 20 28 74 68        output (th
1a290 61 74 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e  at meets the con
1a2a0 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
1a2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a2d0 20 20 20 20 20 20 20 63 72 69 74 65 72 69 61 29         criteria)
1a2e0 20 77 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79   will be display
1a2f0 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
1a300 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 2f 2f 0d 0a 20 20 20 20 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 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
1a350 6e 2e 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20  n.debug)..      
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a3c0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f  NOTE: Add the co
1a3d0 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74  nsole trace list
1a3e0 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20  ener to the..   
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a410 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72        list of tr
1a420 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61  ace listeners ma
1a430 69 6e 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20  intained by..   
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 20 20 20 2f 2f 20               // 
1a460 20 20 20 20 20 20 74 68 65 20 54 72 61 63 65 4f        the TraceO
1a470 70 73 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f  ps class (i.e. o
1a480 6e 6c 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20  nly messages..  
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a4b0 20 20 20 20 20 20 20 74 68 61 74 20 6d 65 65 74         that meet
1a4c0 20 74 68 65 20 64 65 62 75 67 20 70 72 69 6f 72   the debug prior
1a4d0 69 74 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ity will be..   
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a500 20 20 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68        seen on th
1a510 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1a540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 54 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44   TraceOps.SetupD
1a570 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b  ebugListeners();
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 7d 0d                }.
1a5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a5c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
1a630 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
1a640 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
1a650 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
1a680 69 73 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20  ist of built-in 
1a690 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20  trace listeners 
1a6a0 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  (i.e...         
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1a6d0 6f 6e 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68  only messages th
1a6e0 61 74 20 6d 65 65 74 20 74 68 65 20 74 72 61 63  at meet the trac
1a6f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f     //       prio
1a720 72 69 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65  rity will be see
1a730 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65  n on the console
1a740 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a780 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
1a790 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
1a7a0 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
1a7b0 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a840 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
1a870 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 20 20 20 20 20 20 20 20 20 20 21 53 74 72 69 6e            !Strin
1a8a0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1a8b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f  configuration.lo
1a8c0 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  gFileName))..   
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e      Trace.Listen
1a910 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74  ers.Add(new Text
1a920 57 72 69 74 65 72 54 72 61 63 65 4c 69 73 74 65  WriterTraceListe
1a930 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ner(..          
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1a960 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
1a970 29 3b 0d 0a 0d 0a 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 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e    // NOTE: Techn
1a9c0 69 63 61 6c 6c 79 2c 20 77 65 20 63 72 65 61 74  ically, we creat
1a9d0 65 64 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  ed the log file.
1a9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1aa00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
1aa20 6c 65 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20  lesCreated++;.. 
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1aa60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1aa70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aa90 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65  / NOTE: Dump the
1aaa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e   configuration n
1aab0 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65  ow in case we ne
1aac0 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ed to..         
1aad0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1aae0 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74      troubleshoot
1aaf0 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20   any issues...  
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ab20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
1ab30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
1ab40 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61  gPriority <= Tra
1ab50 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1ab60 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1ab80 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64  iguration.Dump(d
1ab90 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a  ebugCallback);..
1aba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1abb0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1abc0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
1abd0 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72  ority <= TracePr
1abe0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a  iority.Medium)..
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ac10 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65  ation.Dump(trace
1ac20 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20  Callback);....  
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ac50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ac60 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77 65  E: Show where we
1ac70 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f   are running fro
1ac80 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72  m and how we wer
1ac90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1aca0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1acb0 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20  invoked...      
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1acd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ace0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63        string loc
1acf0 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79  ation = assembly
1ad00 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20  .Location;....  
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1ad30 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1ad40 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77  iority.MediumLow
1ad50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ad60 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1ad70 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1ad80 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1ad90 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 22 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74   "Running execut
1adc0 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46  able is: {0}", F
1add0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69  orDisplay(locati
1ade0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ae00 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ae10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1ae30 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1ae40 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
1ae50 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  mLow,..         
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1ae70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1ae80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ae90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63       "Original c
1aec0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20  ommand line is: 
1aed0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1aef0 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61  nvironment.Comma
1af00 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61  ndLine), traceCa
1af10 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1af40 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1af50 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
1af60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1af80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1af90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1afa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1afc0 52 75 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20  Running process 
1afd0 69 73 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69  is {0}.", Is64Bi
1afe0 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20  tProcess() ?..  
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 20 20 20 20 20 22 36 34 2d 62 69            "64-bi
1b010 74 22 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20  t" : "32-bit"), 
1b020 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b040 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
1b050 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
1b060 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b0b0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65   NOTE: If the de
1b0c0 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68  bugger is attach
1b0d0 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d  ed and What-If m
1b0e0 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..           
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b100 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64        is [now] d
1b110 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
1b120 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b160 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
1b170 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1b1a0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1b1b0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1b1c0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1b1f0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1b200 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b220 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
1b230 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d   disable \"what-
1b240 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22  if\" mode with "
1b250 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74      "debugger at
1b280 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43  tached.", traceC
1b290 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b2c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b2f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b300 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1b310 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1b320 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1b350 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1b360 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63      "No actual c
1b390 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d  hanges will be m
1b3a0 61 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d  ade to this " +.
1b3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79               "sy
1b3d0 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77  stem because \"w
1b3e0 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73  hat-if\" mode is
1b3f0 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20   enabled.",..   
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b420 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b450 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b470 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  / NOTE: If the c
1b480 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20  ommand line has 
1b490 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c  not been manuall
1b4a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1b4b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1b4c0 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20  confirmed (i.e. 
1b4d0 76 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74  via the explicit
1b4e0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
1b510 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70  on), then stop p
1b520 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20  rocessing now.  
1b530 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20  We enforce..    
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75  //       this ru
1b560 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c  le so that simpl
1b570 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e  y double-clickin
1b580 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
1b590 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1b5a0 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77      executable w
1b5b0 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69  ill not result i
1b5c0 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65  n any changes be
1b5d0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
1b5e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b5f0 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79    made to the sy
1b600 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  stem...         
1b610 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1b640 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a  ation.confirm)..
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b680 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63  rror = "Cannot c
1b690 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63  ontinue, the \"c
1b6a0 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20  onfirm\" option 
1b6b0 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64      "not enabled
1b6e0 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  .";....         
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b700 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b730 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b740 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1b750 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b760 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1b770 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1b780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b7a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1b7b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1b7c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
1b7d0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1b7f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1b800 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
1b810 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b830 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1b840 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73  Failed to proces
1b850 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  s configuration.
1b860 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b890 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b8a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b8b0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b8f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b900 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
1b910 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
1b920 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
1b930 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
1b940 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
1b950 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56  ol CheckRuntimeV
1b960 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
1b970 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
1b980 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
1b990 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
1b9a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69         bool stri
1b9b0 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
1b9c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1b9d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1b9e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1b9f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ba00 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ba20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba30 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1ba40 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ration == null).
1ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64  error = "Invalid
1ba90 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1baa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bab0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bac0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bae0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1baf0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bb10 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72  / NOTE: What ver
1bb20 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74  sion of the runt
1bb30 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f 72 65  ime was the core
1bb40 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20   (primary)..    
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1bb70 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e  y compiled again
1bb80 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35  st (e.g. "v2.0.5
1bb90 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20  0727" or..      
1bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bbb0 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33         "v4.0.303
1bbc0 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  19")...         
1bbd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbf0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d     string coreIm
1bc00 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1bc10 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74  n = GetImageRunt
1bc20 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1bc50 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.coreFileName)
1bc60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bc70 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c   // NOTE: We all
1bca0 6f 77 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d  ow the actual im
1bcb0 61 67 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63  age runtime chec
1bcc0 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20  king to be..    
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 2f 2f 20 20 20 20 20 20 20 62 79 70 61 73 73 65  //       bypasse
1bcf0 64 20 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75  d via the "-noRu
1bd00 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f  ntimeVersion" co
1bd10 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
1bd40 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69    The command li
1bd50 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74  ne option is int
1bd60 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20  ended for..     
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd80 2f 20 20 20 20 20 20 20 65 78 70 65 72 74 20 75  /       expert u
1bd90 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  se only...      
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bdc0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1bdd0 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
1bde0 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20  eVersion)..     
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1be00 0d 0a 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 54 72 61 63 65 4f            TraceO
1be20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1be30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1be40 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1be70 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1be80 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1be90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1beb0 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1bec0 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1bed0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20   Framework {0}; 
1bee0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 22 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61   "however, insta
1bf10 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74  llation restrict
1bf20 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68  ions based on th
1bf30 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 22 66 61 63 74 20 68 61 76 65 20 62      "fact have b
1bf60 65 65 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61  een disabled via
1bf70 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1bf80 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
1bfb0 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63  meVersion), trac
1bfc0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1bff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c000 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c030 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44            // TOD
1c040 4f 3a 20 52 65 73 74 72 69 63 74 20 74 68 65 20  O: Restrict the 
1c050 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61  configuration ba
1c060 73 65 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61  sed on which ima
1c070 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
1c080 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1c090 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1c0a0 73 20 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72  s (which more-or
1c0b0 2d 6c 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64  -less correspond
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c0e0 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  o .NET Framework
1c0f0 20 76 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73   versions) are s
1c100 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d  upported by the.
1c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c120 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65       //       ve
1c130 72 73 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c  rsions of Visual
1c140 20 53 74 75 64 69 6f 20 74 68 61 74 20 61 72 65   Studio that are
1c150 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20   installed...   
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c180 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
1c190 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1c1a0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1c1b0 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20  meVersion))..   
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c1f0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72  r = "invalid cor
1c200 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
1c210 74 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  time version";..
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1c240 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1c250 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e    else if (Strin
1c280 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  g.Equals(..     
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2a0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1c2b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1c2c0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1c2d0 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  eVersion,..     
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
1c300 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
1c310 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c320 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c340 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c360 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43   NOTE: For the C
1c370 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c  LR v2.0 runtime,
1c380 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69   make sure we di
1c390 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  sable..         
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c3b0 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65  /       any atte
1c3c0 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f  mpt to use it fo
1c3d0 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65  r things that re
1c3e0 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20  quire..         
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c400 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d  /       an assem
1c410 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72  bly compiled for
1c420 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20   the CLR v4.0.  
1c430 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  It is..         
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c450 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69  /       uncertai
1c460 6e 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74  n if this is act
1c470 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20  ually a problem 
1c480 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
1c490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c4a0 20 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73       practice as
1c4b0 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61   the CLR v4.0 ca
1c4c0 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61  n load and use a
1c4d0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
1c4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c4f0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d      assembly com
1c500 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43  piled with the C
1c510 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72  LR v2.0; however
1c520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c540 20 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70      since this p
1c550 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f  roject offers bo
1c560 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  th configuration
1c570 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
1c580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c590 20 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c       we currentl
1c5a0 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20  y disallow this 
1c5b0 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20  mismatch...     
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c5f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1c600 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx40 = true;..
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1c630 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
1c640 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c660 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1c670 6f 4e 65 74 46 78 34 35 31 20 3d 20 74 72 75 65  oNetFx451 = true
1c680 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c690 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c6a0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c6b0 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1c6e0 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65  .noVs2012 = true
1c6f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c700 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c710 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1c720 33 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  3 = true;....   
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c750 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1c760 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1c770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1c790 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1c7a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1c7b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1c7e0 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
1c7f0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1c800 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
1c830 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45  port for the .NE
1c840 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
1c850 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
1c860 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1c890 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1c8a0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1c8b0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1c8e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c8f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c910 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
1c920 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c940 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
1c950 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
1c960 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1c970 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
1c9a0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1ca00 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76  E: For the CLR v
1ca10 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b  4.0 runtime, mak
1ca20 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c  e sure we disabl
1ca30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1ca40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca50 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20      any attempt 
1ca60 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68  to use it for th
1ca70 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72  ings that requir
1ca80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1ca90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1caa0 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20      an assembly 
1cab0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1cac0 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...    
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1cb10 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d  NetFx20 = true;.
1cb20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb30 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1cb40 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35  ration.noNetFx35
1cb50 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1cb80 6e 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b  noVs2005 = true;
1cb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cba0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1cbb0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
1cbc0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1cbf0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1cc00 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1cc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1cc30 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1cc40 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1cc50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1cc80 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1cc90 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1cca0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
1ccd0 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ort for the .NET
1cce0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
1ccf0 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
1cd00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1cd20 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49  orDisplay(CLRv4I
1cd30 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1cd40 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1cd70 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1cd80 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1cdb0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1cdc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
1ce20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75             "unsu
1ce50 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c  pported core fil
1ce60 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime 
1ce70 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20  version " +..   
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d           "{0}, m
1cea0 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32  ust be {1} or {2
1ceb0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
1cee0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1cef0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1cf20 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1cf30 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1cf60 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
1cf70 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1cfa0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1cfb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1cfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1d000 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1d010 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1d020 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1d050 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1d060 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1d090 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1d0a0 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1d0b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0d0 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1d0e0 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72  to check image r
1d0f0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22  untime version."
1d100 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d120 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1d130 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1d140 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d150 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d1b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1d1c0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
1d1d0 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
1d1e0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48     public bool H
1d1f0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
1d200 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
1d210 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c  lFlags hasFlags,
1d220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d230 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20    bool all..    
1d240 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1d250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1d270 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   (all)..        
1d280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d290 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
1d2a0 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d  s & hasFlags) ==
1d2b0 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20   hasFlags);..   
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1d2d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d2e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
1d2f0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
1d300 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74  asFlags) != Inst
1d310 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d  allFlags.None);.
1d320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
1d380 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1d390 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c   public bool IsL
1d3a0 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 0d 0a  inqSupported()..
1d3b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d3d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1d3e0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
1d3f0 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  rn non-zero if t
1d400 68 65 20 4c 49 4e 51 20 61 73 73 65 6d 62 6c 79  he LINQ assembly
1d410 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20   should be..    
1d420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d430 20 20 20 20 20 70 72 6f 63 65 73 73 65 64 20 64       processed d
1d440 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61 6c  uring the instal
1d450 6c 2e 20 20 49 66 20 74 68 65 20 74 61 72 67 65  l.  If the targe
1d460 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  t is..          
1d470 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 56        //       V
1d480 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
1d490 35 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 72  5, this should r
1d4a0 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4d0 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78   return !noNetFx
1d4e0 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30  35 || !noNetFx40
1d4f0 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c   || !noNetFx45 |
1d500 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a  | !noNetFx451;..
1d510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d520 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d580 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70  public void Dump
1d590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d5a0 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
1d5b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a   traceCallback..
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5f0 20 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62    if (traceCallb
1d600 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack != null)..  
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d630 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d640 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d650 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d660 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1d680 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73  ssembly", ForDis
1d690 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c  play(assembly)),
1d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d6c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d6f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d700 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d720 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69            "LogFi
1d730 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
1d740 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  lay(logFileName)
1d750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1d760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1d7a0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1d7b0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1d7c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 69 72              "Dir
1d7e0 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70  ectory", ForDisp
1d7f0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
1d800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d810 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d820 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d840 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1d850 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1d860 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1d870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d880 20 20 20 20 20 20 20 20 20 20 22 43 6f 72 65 46            "CoreF
1d890 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
1d8a0 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  play(coreFileNam
1d8b0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d8d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d8f0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1d900 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1d910 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1d920 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
1d940 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  inqFileName", Fo
1d950 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c  rDisplay(linqFil
1d960 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1d990 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d9a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d9b0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1d9c0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1d9d0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e    "DesignerFileN
1da00 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1da10 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
1da20 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1da40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1da50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1da70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1da80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1da90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1dab0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 2c  egistryVersion",
1dac0 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 67 69   ForDisplay(regi
1dad0 73 74 72 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  stryVersion)),..
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1db00 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1db20 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1db30 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1db40 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 67 56          "ConfigV
1db70 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70  ersion", ForDisp
1db80 6c 61 79 28 63 6f 6e 66 69 67 56 65 72 73 69 6f  lay(configVersio
1db90 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dbb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1dbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbd0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1dbe0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1dbf0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1dc00 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56                "V
1dc20 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 22 2c  sVersionSuffix",
1dc30 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
1dc40 72 73 69 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a  rsionSuffix)),..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1dc70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1dc90 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1dca0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1dcb0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46 6f          "DebugFo
1dce0 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  rmat", ForDispla
1dcf0 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29 2c  y(debugFormat)),
1dd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1dd20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1dd50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1dd60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1dd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd80 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65            "Trace
1dd90 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70  Format", ForDisp
1dda0 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74 29  lay(traceFormat)
1ddb0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ddd0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1de00 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1de10 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1de20 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1de30 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1de40 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44  tallFlags", ForD
1de50 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c  isplay(installFl
1de60 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ags)),..        
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1de90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1dea0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1deb0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1dec0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ded0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1def0 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c  "DebugPriority",
1df00 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75   ForDisplay(debu
1df10 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20  gPriority)),..  
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1df40 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1df50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1df60 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1df70 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1df80 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfa0 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69 6f        "TracePrio
1dfb0 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
1dfc0 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 29  y(tracePriority)
1dfd0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1dff0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e010 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e020 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e030 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e040 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e050 20 20 20 20 20 20 20 20 20 20 20 20 22 50 65 72              "Per
1e060 55 73 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61  User", ForDispla
1e070 79 28 70 65 72 55 73 65 72 29 29 2c 0d 0a 20 20  y(perUser)),..  
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e0a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e0c0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e0d0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e0e0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e100 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c        "Install",
1e110 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74   ForDisplay(inst
1e120 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  all)),..        
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e140 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e150 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e160 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e170 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e180 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e190 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 22 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70  "Wow64", ForDisp
1e1c0 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20  lay(wow64)),..  
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e1f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e210 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e220 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e230 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65        "NoRuntime
1e260 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
1e270 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65  play(noRuntimeVe
1e280 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e2b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e2c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e2d0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e2e0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e2f0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e310 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46    "NoDesktop", F
1e320 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b  orDisplay(noDesk
1e330 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  top)),..        
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1e360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e370 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e380 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e390 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e3a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72  "NoCompact", For
1e3d0 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63  Display(noCompac
1e3e0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e400 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e420 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e430 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e440 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e450 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e470 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69  oNetFx20", ForDi
1e480 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29  splay(noNetFx20)
1e490 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e4b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1e4e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1e4f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1e500 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e510 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
1e520 65 74 46 78 33 35 22 2c 20 46 6f 72 44 69 73 70  etFx35", ForDisp
1e530 6c 61 79 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c  lay(noNetFx35)),
1e540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e550 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e560 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e590 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e5a0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5c0 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74            "NoNet
1e5d0 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  Fx40", ForDispla
1e5e0 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a  y(noNetFx40)),..
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e600 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e610 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e630 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1e640 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1e650 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
1e680 34 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  45", ForDisplay(
1e690 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20 20  noNetFx45)),..  
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e6c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e6e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e6f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e700 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e720 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35        "NoNetFx45
1e730 31 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  1", ForDisplay(n
1e740 6f 4e 65 74 46 78 34 35 31 29 29 2c 0d 0a 20 20  oNetFx451)),..  
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1e770 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e780 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1e790 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1e7a0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1e7b0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22        "NoVs2005"
1e7e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1e7f0 73 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20  s2005)),..      
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1e820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e830 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1e840 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1e850 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1e860 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e880 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f    "NoVs2008", Fo
1e890 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30  rDisplay(noVs200
1e8a0 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  8)),..          
1e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1e8c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1e8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e8e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1e8f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1e900 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1e910 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
1e930 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73  oVs2010", ForDis
1e940 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c  play(noVs2010)),
1e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e960 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1e970 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e990 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1e9a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1e9b0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1e9c0 0d 0a 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 22 4e 6f 56 73 32            "NoVs2
1e9e0 30 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  012", ForDisplay
1e9f0 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20  (noVs2012)),..  
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ea20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ea40 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ea50 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ea60 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22        "NoVs2013"
1ea90 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56  , ForDisplay(noV
1eaa0 73 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20  s2013)),..      
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1ead0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1eae0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1eaf0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1eb00 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1eb10 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72    "NoTrace", For
1eb40 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29  Display(noTrace)
1eb50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1eb70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1eba0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
1ebb0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
1ebc0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43              "NoC
1ebe0 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70  onsole", ForDisp
1ebf0 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c  lay(noConsole)),
1ec00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ec20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec40 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
1ec50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
1ec60 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
1ec70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec80 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67            "NoLog
1ec90 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1eca0 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  Log)),..        
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ecd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ece0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ecf0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ed00 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ed10 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "ThrowOnMissing"
1ed40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72  , ForDisplay(thr
1ed50 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a  owOnMissing)),..
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1ed80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1eda0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1edb0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1edc0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ede0 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22          "WhatIf"
1edf0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61  , ForDisplay(wha
1ee00 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  tIf)),..        
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ee30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ee40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ee50 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ee60 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ee70 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70  "Debug", ForDisp
1eea0 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20  lay(debug)),..  
1eeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eec0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1eed0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1eef0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1ef00 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1ef10 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c        "Verbose",
1ef40 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62   ForDisplay(verb
1ef50 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ose)),..        
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef70 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ef80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ef90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1efa0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1efb0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1efc0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69  "Confirm", ForDi
1eff0 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c  splay(confirm)),
1f000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f010 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f020 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f040 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
1f0a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f0e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1f0f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1f100 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79         "Assembly
1f130 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20  Title",..       
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1f160 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  GetAssemblyTitle
1f170 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20  (assembly))),.. 
1f180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f190 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1f1a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1f1d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1f1e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1f1f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f210 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66     "AssemblyConf
1f220 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20  iguration",..   
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1f250 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43  lay(GetAssemblyC
1f260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73  onfiguration(ass
1f270 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20  embly))),..     
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1f2a0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1f2f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1f300 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f350 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1f360 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
1f370 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
1f380 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
1f390 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
1f3a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f3b0 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
1f3c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1f3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f3e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
1f3f0 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
1f400 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1f410 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
1f420 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1f430 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f440 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f480 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f490 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1f4a0 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
1f4b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f4c0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
1f4d0 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
1f4e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f4f0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1f500 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
1f510 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
1f520 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
1f530 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
1f540 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1f550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f560 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f5b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1f5c0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1f5e0 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
1f5f0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
1f600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f610 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1f620 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f640 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
1f650 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1f660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f670 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f6c0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f6d0 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
1f6e0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1f6f0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1f700 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
1f710 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f730 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
1f740 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f760 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
1f770 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
1f780 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f790 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1f7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1f7f0 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
1f800 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
1f810 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1f820 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
1f830 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
1f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f850 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
1f860 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
1f890 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
1f8a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1f910 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65  rivate string de
1f920 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
1f930 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1f940 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67  lic string Desig
1f950 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
1f960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f970 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1f980 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
1f990 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  rFileName; }..  
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1f9b0 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65  t { designerFile
1f9c0 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
1f9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
1fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa30 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fa40 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1fa50 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
1fa60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1fa70 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67 69  blic string Regi
1fa80 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20 20  stryVersion..   
1fa90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
1fab0 7b 20 72 65 74 75 72 6e 20 72 65 67 69 73 74 72  { return registr
1fac0 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  yVersion; }..   
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1fae0 20 7b 20 72 65 67 69 73 74 72 79 56 65 72 73 69   { registryVersi
1faf0 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  on = value; }.. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1fb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fb60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1fb70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f  rivate string co
1fb80 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  nfigVersion;..  
1fb90 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1fba0 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56 65   string ConfigVe
1fbb0 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
1fbc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fbd0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fbe0 72 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  rn configVersion
1fbf0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fc00 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
1fc10 67 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65  gVersion = value
1fc20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fc30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1fc40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1fc90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
1fca0 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75 66  ing vsVersionSuf
1fcb0 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fix;..          
1fcc0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1fcd0 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 0d  VsVersionSuffix.
1fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73 56  get { return vsV
1fd10 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d 0d  ersionSuffix; }.
1fd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd30 20 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f 6e   set { vsVersion
1fd40 53 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b 20  Suffix = value; 
1fd50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1fd60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1fdc0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
1fdd0 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  g debugFormat;..
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fdf0 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 46  ic string DebugF
1fe00 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
1fe10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fe20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1fe30 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20  rn debugFormat; 
1fe40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1fe50 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46 6f     set { debugFo
1fe60 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rmat = value; }.
1fe70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1fe80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1fe90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1feb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fed0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1fee0 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1fef0 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
1ff00 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ff10 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72   string TraceFor
1ff20 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
1ff30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ff40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1ff50 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d   traceFormat; }.
1ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff70 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d   set { traceForm
1ff80 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
1ff90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fff0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20000 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c  rivate InstallFl
20010 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ags installFlags
20020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20030 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61  ublic InstallFla
20040 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d  gs InstallFlags.
20050 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20070 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73  get { return ins
20080 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20  tallFlags; }..  
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
200a0 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  t { installFlags
200b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
200c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20120 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20130 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69  vate TracePriori
20140 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79  ty debugPriority
20150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20160 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72  ublic TracePrior
20170 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
20180 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201a0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
201b0 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d  ebugPriority; }.
201c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201d0 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69 6f   set { debugPrio
201e0 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rity = value; }.
201f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20250 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20260 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72   private TracePr
20270 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
20280 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
20290 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50     public TraceP
202a0 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72 69  riority TracePri
202b0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
202c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
202d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
202e0 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  rn tracePriority
202f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20300 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65       set { trace
20310 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65  Priority = value
20320 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20340 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20390 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
203a0 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20 20  l perUser;..    
203b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
203c0 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20 20  ool PerUser..   
203d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
203e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
203f0 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73 65 72  { return perUser
20400 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20410 20 20 20 20 20 73 65 74 20 7b 20 70 65 72 55 73       set { perUs
20420 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  er = value; }.. 
20430 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20440 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20490 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
204a0 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74  rivate bool inst
204b0 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
204c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e    public bool In
204d0 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  stall..         
204e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
204f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20500 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20  rn install; }.. 
20510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20520 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76  et { install = v
20530 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20550 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
205a0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
205b0 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20 20   bool wow64;..  
205c0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
205d0 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20 20   bool Wow64..   
205e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
205f0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20600 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b 20  { return wow64; 
20610 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20620 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20 3d     set { wow64 =
20630 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20640 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20650 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
206a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
206b0 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d  te bool noRuntim
206c0 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
206d0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
206e0 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol NoRuntimeVers
206f0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
20700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20710 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20720 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
20730 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
20740 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52 75        set { noRu
20750 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 76  ntimeVersion = v
20760 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20780 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
207d0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
207e0 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b   bool noDesktop;
207f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
20800 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b  blic bool NoDesk
20810 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20  top..           
20820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20830 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20840 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20   noDesktop; }.. 
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20860 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d  et { noDesktop =
20870 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20880 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20890 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
208e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
208f0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63  te bool noCompac
20900 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
20910 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
20920 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20  mpact..         
20930 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20940 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
20950 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d  rn noCompact; }.
20960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20970 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74   set { noCompact
20980 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
20990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
209a0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
209b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
209e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
209f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
20a00 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46  vate bool noNetF
20a10 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  x20;..          
20a20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
20a30 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20  NetFx20..       
20a40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20a50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20a60 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20  turn noNetFx20; 
20a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20a80 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
20a90 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  20 = value; }.. 
20aa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
20ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20b00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
20b10 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
20b20 74 46 78 33 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx35;..        
20b30 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
20b40 4e 6f 4e 65 74 46 78 33 35 0d 0a 20 20 20 20 20  NoNetFx35..     
20b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20b60 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20b70 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 33 35  return noNetFx35
20b80 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20b90 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
20ba0 46 78 33 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx35 = value; }.
20bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
20c20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
20c30 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
20c40 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
20c50 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20  l NoNetFx40..   
20c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20c70 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
20c80 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
20c90 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  40; }..         
20ca0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
20cb0 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20  etFx40 = value; 
20cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20d30 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
20d40 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20  noNetFx45;..    
20d50 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
20d60 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20  ool NoNetFx45.. 
20d70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20d90 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74  t { return noNet
20da0 46 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Fx45; }..       
20db0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
20dc0 6f 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65  oNetFx45 = value
20dd0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
20de0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20df0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20e30 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20e40 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
20e50 6c 20 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20  l noNetFx451;.. 
20e60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20e70 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 35  c bool NoNetFx45
20e80 31 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  1..            {
20e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ea0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
20eb0 6f 4e 65 74 46 78 34 35 31 3b 20 7d 0d 0a 20 20  oNetFx451; }..  
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20ed0 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 31 20 3d  t { noNetFx451 =
20ee0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20ef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20f00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20f50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20f60 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35  te bool noVs2005
20f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20f80 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
20f90 30 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  005..           
20fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20fb0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
20fc0 20 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20   noVs2005; }..  
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20fe0 74 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76  t { noVs2005 = v
20ff0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
21000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21010 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21050 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21060 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
21070 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d   bool noVs2008;.
21080 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21090 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30  lic bool NoVs200
210a0 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  8..            {
210b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210c0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
210d0 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20  oVs2008; }..    
210e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
210f0 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c  { noVs2008 = val
21100 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21120 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21170 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21180 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20  ool noVs2010;.. 
21190 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
211a0 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d  c bool NoVs2010.
211b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56  get { return noV
211e0 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20  s2010; }..      
211f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
21200 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65  noVs2010 = value
21210 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21220 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21230 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21280 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
21290 6c 20 6e 6f 56 73 32 30 31 32 3b 0d 0a 20 20 20  l noVs2012;..   
212a0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
212b0 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 32 0d 0a 20  bool NoVs2012.. 
212c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
212e0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32  t { return noVs2
212f0 30 31 32 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  012; }..        
21300 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
21310 56 73 32 30 31 32 20 3d 20 76 61 6c 75 65 3b 20  Vs2012 = value; 
21320 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21380 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
21390 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
213a0 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20  noVs2013;..     
213b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
213c0 6f 6c 20 4e 6f 56 73 32 30 31 33 0d 0a 20 20 20  ol NoVs2013..   
213d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
213e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
213f0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31  { return noVs201
21400 33 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  3; }..          
21410 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
21420 32 30 31 33 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2013 = value; }.
21430 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
214a0 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
214b0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
214c0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
214d0 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20  NoTrace..       
214e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
214f0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
21500 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d  turn noTrace; }.
21510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21520 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d   set { noTrace =
21530 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21540 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21550 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
215a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
215b0 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c  te bool noConsol
215c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
215d0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f  public bool NoCo
215e0 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  nsole..         
215f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21600 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
21610 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d  rn noConsole; }.
21620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21630 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65   set { noConsole
21640 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21650 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21660 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
216b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
216c0 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b  vate bool noLog;
216d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
216e0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d  blic bool NoLog.
216f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c  get { return noL
21720 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  og; }..         
21730 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c         set { noL
21740 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  og = value; }.. 
21750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
217b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
217c0 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72 6f  rivate bool thro
217d0 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
217e0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
217f0 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73 73  bool ThrowOnMiss
21800 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
21810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21820 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21830 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
21840 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21850 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77 4f      set { throwO
21860 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75 65  nMissing = value
21870 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21890 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
218a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
218e0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
218f0 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
21900 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
21910 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
21920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21930 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
21940 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
21950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21960 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d    set { whatIf =
21970 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
21980 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21990 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
219e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
219f0 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d 0a  te bool debug;..
21a00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
21a10 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a 20  ic bool Debug.. 
21a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21a40 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67  t { return debug
21a50 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
21a60 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67       set { debug
21a70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
21a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21a90 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
21af0 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73  vate bool verbos
21b00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21b10 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62  public bool Verb
21b20 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
21b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21b40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
21b50 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20   verbose; }..   
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
21b70 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c   { verbose = val
21b80 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
21b90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21ba0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21be0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21bf0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
21c00 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  ool confirm;..  
21c10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
21c20 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20   bool Confirm.. 
21c30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
21c50 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69  t { return confi
21c60 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  rm; }..         
21c70 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e         set { con
21c80 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  firm = value; }.
21c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
21cb0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
21cc0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
21cd0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
21ce0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21d30 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61 6d      #region Fram
21d40 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d  eworkList Class.
21d50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21d60 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46 72   sealed class Fr
21d70 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
21d80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21d90 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
21da0 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
21db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
21dc0 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  lic FrameworkLis
21dd0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
21de0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21df0 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
21e00 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
21e10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
21e20 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
21e30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
21e80 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
21e90 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
21ea0 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
21eb0 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
21ec0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b  stryKey rootKey;
21ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
21ee0 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
21ef0 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
21f00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
21f20 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
21f30 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
21f40 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
21f50 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
21f60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
21f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21fd0 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69  private StringLi
21fe0 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  st names;..     
21ff0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
22000 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a  ringList Names..
22010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
22030 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65  et { return name
22040 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
22050 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65        set { name
22060 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
22070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22080 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
22090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
220d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
220e0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70  ivate VersionMap
220f0 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20   versions;..    
22100 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
22110 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f  ersionMap Versio
22120 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
22130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22140 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
22150 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  versions; }..   
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
22170 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61   { versions = va
22180 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
22190 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
221a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
221f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22200 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66  StringList platf
22210 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20  ormNames;..     
22220 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74         public St
22230 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72  ringList Platfor
22240 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  mNames..        
22250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22260 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
22270 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  urn platformName
22280 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
22290 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74        set { plat
222a0 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75  formNames = valu
222b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
222c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
222d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
222e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
222f0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22300 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22350 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22360 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20   VsList Class.. 
22370 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
22380 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69  ealed class VsLi
22390 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
223a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
223b0 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
223c0 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
223d0 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73      public VsLis
223e0 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
223f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22400 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
22410 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
22420 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
22430 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
22440 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22490 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
224a0 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
224b0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
224c0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
224d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
224e0 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
224f0 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
22500 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
22510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
22540 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
22550 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
22560 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
22570 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
225d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
225e0 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
225f0 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73 3b  onList versions;
22600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
22610 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
22620 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
22630 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22640 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
22650 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
22660 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22670 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
22680 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
22690 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
226a0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
226b0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
226c0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
226d0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
226e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
226f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22740 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
22750 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44  ivate Constant D
22760 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
22770 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
22780 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g CoreFileName =
22790 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
227a0 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  Lite.dll";..    
227b0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
227c0 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  t string LinqFil
227d0 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
227e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
227f0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
22800 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
22810 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
22820 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e  eName = "SQLite.
22830 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a  Designer.dll";..
22840 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22850 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
22860 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c  viderName = "SQL
22870 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65  ite Data Provide
22880 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  r";..        pri
22890 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
228a0 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  g ProjectName = 
228b0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
228c0 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
228d0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
228e0 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63  ing LegacyProjec
228f0 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22  tName = "SQLite"
22900 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
22910 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
22920 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20  InvariantName = 
22930 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
22940 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
22950 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22960 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
22970 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
22980 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
22990 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
229a0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
229b0 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74   string Descript
229c0 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d  ion = ".NET Fram
229d0 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69  ework Data Provi
229e0 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b  der for SQLite";
229f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22a50 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
22a60 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52 75  ing CLRv2ImageRu
22a70 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
22a80 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
22a90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
22aa0 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 34  nst string CLRv4
22ab0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
22ac0 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31  ion = "v4.0.3031
22ad0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22b30 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
22b40 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61  string NameAndVa
22b50 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  lueFormat = "{0}
22b60 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {1}";..       
22b70 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
22b80 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66  tring LogFileSuf
22b90 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d  fix = ".log";...
22ba0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
22c00 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
22c10 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22   RootKeyName = "
22c20 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20  Software";..    
22c30 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
22c40 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75  t string Wow64Su
22c50 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36  bKeyName = "Wow6
22c60 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20  432Node";....   
22c70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22cc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
22cd0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
22ce0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
22cf0 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20  has both 32-bit 
22d00 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74 69  and 64-bit editi
22d10 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ons...        //
22d20 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22d30 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
22d40 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32  y bool NetFxIs32
22d50 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b  BitOnly = false;
22d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22db0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
22dc0 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
22dd0 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73  TE: For now, Vis
22de0 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c  ual Studio is al
22df0 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61 70  ways a 32-bit ap
22e00 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20  plication...    
22e10 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
22e20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
22e30 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49  eadonly bool VsI
22e40 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75  s32BitOnly = tru
22e50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
22e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ea0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22eb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22ec0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
22ed0 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22  VsIdFormat = "B"
22ee0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22f40 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
22f50 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
22f60 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
22f70 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t =..           
22f80 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f   "configuration/
22f90 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72  system.data/DbPr
22fa0 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f  oviderFactories/
22fb0 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  add[@invariant=\
22fc0 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20  "{0}\"]";....   
22fd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
22fe0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
22ff0 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f  ing XPathForRemo
23000 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20  veElement =..   
23010 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67           "config
23020 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64  uration/system.d
23030 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61  ata/DbProviderFa
23040 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40  ctories/remove[@
23050 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
23060 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  "]";..        #e
23070 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23080 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
230d0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
230e0 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61  rivate Static Da
230f0 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ta..        priv
23100 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d  ate static Assem
23110 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79  bly thisAssembly
23120 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45   = Assembly.GetE
23130 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79  xecutingAssembly
23140 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ();....        p
23150 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
23160 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67 6f  ring traceCatego
23170 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  ry = Path.GetFil
23180 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
23190 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c 79      thisAssembly
231a0 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e  .Location); /* N
231b0 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20 64 65  OTE: Same for de
231c0 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e 20 2a  bug and trace. *
231d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
231e0 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
231f0 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
23200 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
23210 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
23220 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
23230 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
23240 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
23250 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ce;....        /
23260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
232b0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
232c0 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69   string systemDi
232d0 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
232e0 0a 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a  ...#if WINDOWS..
232f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23300 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
23310 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77  stemDirectoryWow
23320 36 34 20 3d 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64  64 = null;..#end
23330 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  if....        //
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23380 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23390 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
233a0 69 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64  int filesCreated
233b0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70   = 0;..        p
233c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
233d0 74 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20  t filesModified 
233e0 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
233f0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
23400 20 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20   filesDeleted = 
23410 30 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0;..        #end
23420 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
23430 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23470 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23480 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
23490 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
234a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
234b0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f  tic string GetLo
234c0 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
234d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
234e0 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ypeName..       
234f0 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f 77 20       ) /* throw 
23500 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
23510 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
23520 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
23530 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61 6d  h.GetTempFileNam
23540 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
23550 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
23560 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
23570 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65 4e  ectoryName(fileN
23580 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
23590 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
235a0 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47 65  meOnly = Path.Ge
235b0 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75 74  tFileNameWithout
235c0 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61  Extension(fileNa
235d0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
235e0 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46 69      string newFi
235f0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
23600 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
23610 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
23620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23630 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 72   "{0}{1}{2}", tr
23640 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21 53 74  aceCategory, !St
23650 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
23660 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f 0d 0a  ty(typeName) ?..
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65 4e 61      "." + typeNa
23690 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74  me : String.Empt
236a0 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d  y, "." + fileNam
236b0 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20 20 20  eOnly +..       
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67               Log
236d0 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d 0a 0d  FileSuffix));...
236e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c  .            Fil
236f0 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d 65 2c  e.Move(fileName,
23700 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a   newFileName);..
23710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23720 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61 6d 65  turn newFileName
23730 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
23740 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23790 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
237a0 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41  te static void A
237b0 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20  ppDebug(..      
237c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
237d0 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
237e0 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
237f0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
23800 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23810 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
23820 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72  ps.DebugCore(Str
23830 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23850 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
23860 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74  t, TraceOps.Next
23870 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20  DebugId(),..    
23880 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
23890 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44  eOps.TimeStamp(D
238a0 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c  ateTime.UtcNow),
238b0 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
238c0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
238d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
238e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23930 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
23940 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20  id AppTrace(..  
23950 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23960 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
23970 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
23980 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
23990 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
239a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
239b0 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65  aceOps.TraceCore
239c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
239d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239e0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
239f0 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
23a00 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a  NextTraceId(),..
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
23a30 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
23a40 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
23a50 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
23a60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
23a70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23a80 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23a90 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
23ad0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47         #region G
23ae0 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72 6d 20  eneric Platform 
23af0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23b00 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23b10 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50 72 6f   bool Is64BitPro
23b20 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20 20 20  cess()..        
23b30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
23b40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
23b50 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  / NOTE: Returns 
23b60 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72 72  true if the curr
23b70 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73 20 36  ent process is 6
23b80 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69 73 0d  4-bit.  If this.
23b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
23ba0 20 20 20 20 20 20 69 73 20 74 72 75 65 2c 20 77        is true, w
23bb0 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20 77 65  e *know* that we
23bc0 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69 6e 67   must be running
23bd0 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a 20 20   on a 64-bit..  
23be0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
23bf0 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
23c00 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20 48 6f  tem as well.  Ho
23c10 77 65 76 65 72 2c 20 69 66 20 74 68 69 73 20 69  wever, if this i
23c20 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20 20 20  s false, we..   
23c30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
23c40 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61    do not necessa
23c50 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74 20 77  rily know that w
23c60 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e  e are running on
23c70 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20 20 20   a 32-bit..     
23c80 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
23c90 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
23ca0 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34 20 28  , due to WoW64 (
23cb0 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34 29 2c  Win32-on-Win64),
23cc0 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20   etc...         
23cd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
23ce0 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74 50 74     return (IntPt
23cf0 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65 6f 66  r.Size == sizeof
23d00 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f 54 45  (long)); // NOTE
23d10 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36 34 2d  : Pointer is 64-
23d20 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20 20 7d  bits?..        }
23d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23d90 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
23da0 6f 6c 20 49 73 53 75 70 70 6f 72 74 65 64 52 6f  ol IsSupportedRo
23db0 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  otKey(..        
23dc0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
23dd0 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
23de0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
23df0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 0d  stryKey rootKey.
23e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23e10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 62         return Ob
23e30 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
23e40 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
23e50 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
23e60 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  er) ||..        
23e70 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 2e 52          Object.R
23e80 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
23e90 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
23ea0 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 3b 0d  .LocalMachine);.
23eb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23ec0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
23f10 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23f20 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
23f30 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a  etRootKeyName(..
23f40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23f50 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
23f60 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
23f70 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
23f80 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23f90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
23fa0 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 46           // BUGF
23fb0 49 58 3a 20 41 70 70 61 72 65 6e 74 6c 79 2c 20  IX: Apparently, 
23fc0 74 68 65 20 70 65 72 2d 75 73 65 72 20 72 65 67  the per-user reg
23fd0 69 73 74 72 79 20 68 69 76 65 20 64 6f 65 73 20  istry hive does 
23fe0 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20 20 20 20  not use..       
23ff0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20       //         
24000 74 68 65 20 22 57 6f 77 36 34 33 32 4e 6f 64 65  the "Wow6432Node
24010 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f 72 65 20  " node to store 
24020 73 65 74 74 69 6e 67 73 20 66 6f 72 20 33 32 2d  settings for 32-
24030 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
24040 20 2f 2f 20 20 20 20 20 20 20 20 20 61 70 70 6c   //         appl
24050 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e 69 6e 67  ications running
24060 20 6f 6e 20 61 20 36 34 2d 62 69 74 20 6f 70 65   on a 64-bit ope
24070 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e 0d 0a  rating system...
24080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
24090 20 20 20 20 20 20 20 54 69 63 6b 65 74 20 5b 61         Ticket [a
240a0 30 36 37 37 33 30 39 66 30 5d 20 68 61 73 20 66  0677309f0] has f
240b0 75 72 74 68 65 72 20 64 65 74 61 69 6c 73 2e 0d  urther details..
240c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
240d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
240e0 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
240f0 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74  t("{0}{1}", Root
24100 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
24110 20 20 20 20 20 20 20 20 20 20 21 70 65 72 55 73            !perUs
24120 65 72 20 26 26 20 77 6f 77 36 34 20 26 26 20 49  er && wow64 && I
24130 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
24140 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
24150 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f         "\\" + Wo
24160 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20  w64SubKeyName : 
24170 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
24180 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24190 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
241a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
241e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
241f0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
24200 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
24210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
24220 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
24230 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24240 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
24250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24260 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20   (wow64)..      
24270 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24280 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
24290 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
242a0 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  4 == null)..    
242b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
242e0 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20  ryWow64 =..     
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24300 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
24310 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d  ethods.GetSystem
24320 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20  Directory();..  
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24350 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
24360 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d  DirectoryWow64;.
24370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24380 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
24390 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
243a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
243b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
243c0 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20  temDirectory == 
243d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
243e0 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
243f0 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76  mDirectory = Env
24400 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
24410 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24430 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
24440 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
24450 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
24460 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
24470 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
244d0 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
244e0 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
244f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24500 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
24510 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
24520 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
24530 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
24540 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
24550 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24560 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
24570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24580 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
24590 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
245a0 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
245c0 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
245d0 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
245e0 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
245f0 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
24600 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
24610 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24620 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
24630 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
24640 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
24650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24660 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
24670 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
24680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
24690 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
246a0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
246b0 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
246c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
246e0 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
246f0 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
24700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24710 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
24720 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
24730 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
24740 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24750 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
24760 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24770 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
24780 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
24790 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
247a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
247b0 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
247c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
247d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
247e0 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
247f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
24800 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
24810 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
24820 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
24830 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
24840 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
24850 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
24860 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24870 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
24880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
248a0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
248b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
248c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
248d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24920 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
24930 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
24940 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
24950 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
24960 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
24970 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
24980 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
24990 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
249a0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
249b0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
249c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
249d0 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
249e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
249f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24a00 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
24a10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24a30 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
24a40 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
24a70 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
24a80 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
24a90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
24aa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
24ad0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
24ae0 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
24af0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
24b20 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
24b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
24b50 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
24b60 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
24b90 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
24ba0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
24bb0 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
24be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24c00 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
24c10 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
24c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24c40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24c50 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
24c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24c80 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
24c90 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
24ca0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24cb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24cd0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
24ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
24cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
24d40 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
24d50 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
24d60 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
24d70 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
24d80 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
24d90 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
24da0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24db0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
24dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24de0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
24df0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24e10 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
24e20 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
24e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e40 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
24e50 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
24e60 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24e90 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
24ea0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
24eb0 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
24ee0 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
24ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
24f10 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
24f20 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
24f50 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
24f60 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
24f70 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
24fa0 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
24fb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24fe0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
24ff0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25010 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25040 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
25050 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
25060 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25070 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
25080 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
250d0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
250e0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
250f0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
25100 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
25110 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
25120 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
25130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
25140 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
25150 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
25160 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
25170 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25180 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25190 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
251a0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
251b0 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  \.NETFramework",
251c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251d0 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
251e0 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
251f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
25200 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25250 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
25260 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
25270 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  g GetFrameworkKe
25280 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
25290 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
252a0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
252b0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
252c0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
252d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
252e0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
252f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25300 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
25310 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25320 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
25330 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25340 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
25350 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
25360 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
25370 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
25380 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
25390 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
253a0 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c  oft\\{1}\\v{2}\\
253b0 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  {3}" :..        
253c0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
253d0 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
253e0 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
253f0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
25400 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c  g.Format(format,
25410 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
25420 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
25430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25440 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
25450 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25460 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
25470 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
25480 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
254d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
254e0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
254f0 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
25500 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
25510 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
25520 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
25530 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25540 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
25550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25570 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
25580 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ly =..          
25590 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
255a0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
255b0 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61  yLoadFrom(fileNa
255c0 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
255d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
255e0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
255f0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25610 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49  eturn assembly.I
25620 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
25630 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
25640 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25650 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
25660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25670 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
25680 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
25690 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
256a0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
256b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
256c0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
256d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25710 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25720 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25730 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
25740 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
25750 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
25760 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
25770 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
25780 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
25790 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
257a0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
257b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
257c0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
257d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
257e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
257f0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
25800 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25820 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
25830 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
25840 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
25850 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25870 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61 6d 65  ootKey, GetFrame
25880 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
25890 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
258a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
258b0 20 20 20 20 20 20 66 61 6c 73 65 2c 20 77 68 61        false, wha
258c0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
258d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
258f0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
25900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25910 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
25920 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25930 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
25940 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
25950 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
25960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25970 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52    key, "InstallR
25980 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  oot", null, what
25990 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
259a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259b0 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
259c0 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
259e0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
259f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25a00 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e  turn Path.Combin
25a10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25a20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
25a30 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f  value, String.Fo
25a40 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61  rmat("v{0}", fra
25a50 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b  meworkVersion));
25a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25a70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
25a80 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
25a90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
25aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ae0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
25af0 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f  gion Per-Framewo
25b00 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64  rk/Platform Hand
25b10 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
25b20 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
25b30 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d  d InitializeFram
25b40 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20  eworkList(..    
25b50 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
25b60 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
25b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
25b80 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
25b90 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
25ba0 20 20 20 20 20 20 20 20 72 65 66 20 46 72 61 6d          ref Fram
25bb0 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
25bc0 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20  orkList..       
25bd0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25bf0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25c00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25c10 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
25c20 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46  workList = new F
25c30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d  rameworkList();.
25c40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25c50 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25c60 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
25c70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25c80 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
25c90 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b  .RootKey = rootK
25ca0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
25cb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cf0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25d00 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
25d10 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
25d20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25d40 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
25d50 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77  List.Names = new
25d60 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
25d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d80 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
25d90 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
25da0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
25db0 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
25de0 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61  mes.Add(".NETFra
25df0 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20  mework");....   
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25e10 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
25e20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
25e30 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
25e40 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
25e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25e70 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
25e80 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
25e90 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25eb0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
25ec0 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
25ed0 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
25ee0 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  k");..          
25ef0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
25f00 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
25f10 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
25f20 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
25f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25f40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25f50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
25fb0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
25fc0 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
25fd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25ff0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26000 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20  .Versions = new 
26010 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d  VersionMap();...
26020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26030 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
26040 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
26050 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
26060 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20  oDesktop)..     
26070 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26090 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65    VersionList de
260a0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
260b0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
260c0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
260e0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
260f0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
26100 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
26110 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx20)..         
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
26130 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
26140 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
26150 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b  n(2, 0, 50727));
26160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26170 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26190 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45  // NOTE: The .NE
261a0 54 20 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35 20  T Framework 3.5 
261b0 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74  does not have it
261c0 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  s own..         
261d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
261e0 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68      directory; h
261f0 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c  owever, it still
26200 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62   may have assemb
26210 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
26220 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
26230 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65   folders for use
26240 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69   in Visual Studi
26250 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  o, etc...       
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
26270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26280 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
26290 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
262a0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
262b0 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35 29 0d 0a 20  on.NoNetFx35).. 
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
262e0 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
262f0 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 29 29  w Version(3, 5))
26300 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26310 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
26320 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
26330 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
26340 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30  ration.NoNetFx40
26350 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26360 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
26370 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
26380 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
26390 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a   0, 30319));....
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
263c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
263d0 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46 72  OTE: The .NET Fr
263e0 61 6d 65 77 6f 72 6b 20 34 2e 35 20 64 6f 65 73  amework 4.5 does
263f0 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77   not have its ow
26400 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
26410 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
26420 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76  directory; howev
26430 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79  er, it still may
26440 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a   have assembly..
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c      //       fol
26470 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20  ders for use in 
26480 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65  Visual Studio, e
26490 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc...           
264a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264c0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
264d0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
264e0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
264f0 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20 20 20  oNetFx45)..     
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
26520 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
26530 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30 37 30  rsion(4, 5, 5070
26540 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  9));....        
26550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26570 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
26580 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
26590 34 2e 35 2e 31 20 64 6f 65 73 20 6e 6f 74 20 68  4.5.1 does not h
265a0 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20  ave its own..   
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74   //       direct
265d0 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74  ory; however, it
265e0 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20   still may have 
265f0 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
26610 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66         folders f
26620 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c  or use in Visual
26630 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20   Studio, etc... 
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26660 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
26670 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
26680 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
26690 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
266a0 34 35 31 29 0d 0a 20 20 20 20 20 20 20 20 20 20  451)..          
266b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
266c0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
266d0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
266e0 28 34 2c 20 35 2c 20 31 29 29 3b 0d 0a 0d 0a 20  (4, 5, 1));.... 
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26710 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e  .Versions.Add(".
26720 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a  NETFramework",..
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26740 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
26750 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20  ersionList);..  
26760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26780 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
26790 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
267a0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
267b0 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20  .NoCompact)..   
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
267f0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22  t.Versions.Add("
26800 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
26810 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20  work",..        
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
26840 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d  new Version[] {.
26850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26860 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
26870 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29  sion(2, 0, 0, 0)
26880 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c  , new Version(3,
26890 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20   5, 0, 0)..     
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
268b0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
268c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
268d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
268e0 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26930 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
26940 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
26950 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
26960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26980 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
26990 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e  latformNames = n
269a0 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b  ew StringList();
269b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
269c0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
269d0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
269e0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
269f0 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20  n.NoDesktop)..  
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
26a20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
26a30 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20  d(null);....    
26a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26a50 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
26a60 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
26a70 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
26a80 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
26a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
26ab0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
26ac0 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f  ormNames.Add("Po
26ad0 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20  cketPC");..     
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26af0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
26b00 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
26b10 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20  Smartphone");.. 
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
26b40 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
26b50 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b  dd("WindowsCE");
26b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26b80 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
26b90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
26bf0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
26c00 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72  HaveFrameworkDir
26c10 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
26c20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
26c30 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
26c40 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26c50 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
26c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
26c70 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
26c80 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
26c90 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
26ca0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
26cb0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
26cc0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
26cd0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
26ce0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26cf0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
26d00 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
26d10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
26d20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26d30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26d40 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61  keyName = GetFra
26d50 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
26d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d70 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
26d80 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
26d90 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70   platformName, p
26da0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
26db0 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b           wow64);
26dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26dd0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
26de0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
26df0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
26e00 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
26e20 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
26e30 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
26e40 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
26e50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26e60 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
26e70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26e90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26eb0 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
26ec0 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
26ed0 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
26ee0 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
26ef0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26f00 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
26f10 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26f20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46  directory = GetF
26f30 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
26f40 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26f50 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
26f60 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26f70 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  n, perUser, wow6
26f80 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  4, whatIf,..    
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26fc0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
26fd0 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
26fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26ff0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27000 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
27010 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
27020 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
27030 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
27040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27050 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
27080 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
27090 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
270c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
270d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
27100 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61  rk {0} found via
27110 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
27120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27130 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
27140 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
27150 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on), ForDisplay(
27160 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27180 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
27190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
271a0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
271b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
271c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
271d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27220 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
27230 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
27240 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73  veFrameworkRegis
27250 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
27260 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
27270 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
27280 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
27290 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
272a0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
272b0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
272c0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
272d0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
272e0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
272f0 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
27300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27310 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
27320 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
27330 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
27340 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
27350 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
27360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27370 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
27380 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77  Name = GetFramew
27390 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  orkKeyName(..   
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
273b0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
273c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
273d0 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
273e0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
273f0 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d        wow64);...
27400 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
27410 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
27420 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
27430 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
27440 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27450 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27460 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
27470 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
27480 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
27490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
274a0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
274b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
274c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
274d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
274e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
274f0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
27500 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
27510 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
27520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27530 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
27540 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
27550 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
27560 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
27570 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
27580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27590 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
275a0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
275b0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
275c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
275d0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
275e0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75  ramework {0} fou
275f0 6e 64 20 76 69 61 20 72 65 67 69 73 74 72 79 20  nd via registry 
27600 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
27610 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
27620 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
27630 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73  Version), ForDis
27640 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d  play(keyName)),.
27650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27660 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
27670 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27680 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
27690 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
276a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
276b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
276c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27700 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
27710 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
27720 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
27730 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
27740 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27750 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
27760 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20  eworkConfig(..  
27770 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
27780 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c  gistry registry,
27790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
277a0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
277b0 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
277c0 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
277d0 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20  kConfigCallback 
277e0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
277f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65         string ve
27800 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20  rsion, /* NOTE: 
27810 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20  Optional. */..  
27820 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27830 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
27840 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27850 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
27860 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
27870 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
27880 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
27890 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
278a0 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
278b0 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
278c0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
278d0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
278e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
278f0 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
27900 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
27910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27920 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
27930 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
27940 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
27950 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
27960 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
27970 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
27980 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
27990 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
279a0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
279b0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
279c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
279d0 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
279e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27a10 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27a30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
27a40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27a50 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
27a60 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
27a70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27a90 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
27aa0 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
27ab0 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
27ac0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27ad0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27ae0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27af0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
27b00 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
27b10 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
27b20 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
27b30 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
27b40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27b60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27b70 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
27b80 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
27b90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27ba0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27bb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27bc0 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65   if (!IsSupporte
27bd0 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72  dRootKey(registr
27be0 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20  y, rootKey))..  
27bf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27c10 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
27c20 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
27c30 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
27c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27c80 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
27c90 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
27cc0 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
27cd0 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
27ce0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
27cf0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27d00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
27d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27d20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
27d30 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
27d40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27d50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27d60 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
27d70 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
27d80 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
27d90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27da0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27db0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27dc0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
27dd0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
27de0 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
27df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e10 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
27e20 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
27e30 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
27e40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27e50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27e60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27e70 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
27e80 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
27e90 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
27ea0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
27eb0 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
27ec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27ed0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
27ee0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
27ef0 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
27f00 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
27f10 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
27f20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
27f30 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
27f40 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
27f50 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
27f60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
27f70 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
27f80 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
27f90 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27fb0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27fc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27fd0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
27fe0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
27ff0 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
28000 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
28010 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
28020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28030 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28050 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
28060 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
28070 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
28080 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
280a0 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
280b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
280c0 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
280d0 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
280e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
28100 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
28110 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
28120 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
28130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28140 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
28150 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
28160 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
28170 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28190 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
281a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
281b0 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70   all non-desktop
281c0 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65   frameworks (i.e
281d0 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72  . if the platfor
281e0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
281f0 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65     //       name
28200 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a   is not null)...
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28230 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
28240 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
28250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28260 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
28270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28280 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28290 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
282a0 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
282b0 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
282c0 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
282e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
282f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28300 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28310 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
28320 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
28330 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
28340 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
28350 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  ersion != null).
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 2f 2f 0d 0a 20 20 20 20          //..    
28390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283a0 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20  // NOTE: Manual 
283b0 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20  override of the 
283c0 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20  *ONE* framework 
283d0 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  version..       
283e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
283f0 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73        to process
28400 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28410 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
28430 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
28440 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f  ist = new Versio
28450 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20  nList();..      
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
28470 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
28480 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
28490 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20  on(version));.. 
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
284b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
284c0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
284d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
284e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
284f0 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73  f (!frameworkLis
28500 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65  t.Versions.TryGe
28510 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28530 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
28540 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
28550 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
28560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28570 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
28580 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
28590 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
285b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
285c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
285d0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
285e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
285f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28610 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
28620 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
28630 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
28640 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28670 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
28680 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
28690 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
286a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
286b0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
286c0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
286d0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
286e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
286f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28700 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
28710 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
28720 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
28730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28740 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
28750 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
28760 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
28770 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
28780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28790 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
287a0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
287b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
287c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
287d0 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
287e0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
287f0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28810 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44  (!HaveFrameworkD
28820 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
28830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28840 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
28850 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
28860 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
28870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
28890 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
288a0 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
288b0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
288c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
288f0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28900 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28910 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
28920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28930 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
28940 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
28950 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
28960 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28980 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
28990 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74  0} directory not
289a0 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20   found, " +..   
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289c0 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
289d0 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
289e0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
289f0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
28a20 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
28a40 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
28a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28a70 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
28a80 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28aa0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
28ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28ac0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
28ad0 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
28ae0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
28af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28b00 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28b10 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  y, frameworkVers
28b20 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ion, perUser, wo
28b30 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
28b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b50 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
28b60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28b70 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
28b80 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
28b90 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
28ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28bd0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
28be0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
28bf0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
28c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c10 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
28c20 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
28c30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
28c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
28c60 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
28c70 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e   directory is in
28c80 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20  valid, " +..    
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ca0 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
28cb0 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
28cc0 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
28cd0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cf0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
28d00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
28d20 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
28d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d50 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
28d60 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
28d70 69 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69  irectory, "Confi
28d80 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g");....        
28d90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28da0 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
28db0 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28dd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28df0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
28e00 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
28e10 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e30 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
28e40 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
28e50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
28e60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
28e80 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
28e90 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  0} directory {1}
28ea0 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ec0 20 20 20 20 20 20 20 20 20 20 20 22 65 78 69 73             "exis
28ed0 74 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  t, skipping...",
28ee0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28ef0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f10 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
28f20 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
28f30 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
28f40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
28f60 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28f80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28f90 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
28fa0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
28fb0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
28fc0 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67   "machine.config
28fd0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
28fe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
28ff0 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65  File.Exists(file
29000 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
29010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29030 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29040 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
29050 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
29060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
29080 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
29090 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
290a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
290d0 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65  amework {0} file
290e0 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78   {1} does not ex
290f0 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  ist, " +..      
29100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29110 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
29120 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
29130 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
29140 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
29150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29160 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e  ForDisplay(fileN
29170 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
29180 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
291d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c            bool l
291e0 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73  ocalSaved = fals
291f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
29200 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
29210 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
29220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29230 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
29240 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
29250 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
29260 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29280 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d       assemblyNam
29290 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70  e, clientData, p
292a0 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a  erUser, wow64,..
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
292d0 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74  wOnMissing, what
292e0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
292f0 20 6c 6f 63 61 6c 53 61 76 65 64 2c 0d 0a 20 20   localSaved,..  
29300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29310 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
29320 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
29330 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29360 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29370 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29390 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
293a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61       if (localSa
293d0 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a  ved && !saved)..
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
29400 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  d = true;....   
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
29430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
29450 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
29460 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
29470 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29490 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
294a0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
294b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
294c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61             "loca
294f0 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61  lSaved = {0}, sa
29500 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ved = {1}",..   
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29520 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
29530 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76  Display(localSav
29540 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed), ForDisplay(
29550 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20  saved)),..      
29560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29570 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
29580 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
295a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
295b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
295c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
295d0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
295e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
295f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
29640 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
29650 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
29660 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
29670 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
29680 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
29690 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
296a0 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
296b0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
296c0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
296d0 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
296e0 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
296f0 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
29700 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65       FrameworkRe
29710 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
29720 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
29730 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72        string ver
29740 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f  sion, /* NOTE: O
29750 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20  ptional. */..   
29760 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
29770 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
29780 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
29790 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
297a0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
297b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
297c0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
297d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
297e0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
297f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
29800 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
29810 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
29820 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
29830 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
29840 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29850 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
29860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29880 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
29890 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
298a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
298b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
298c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
298d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
298e0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
298f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29910 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
29920 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
29930 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
29940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29950 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29960 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29970 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29980 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
29990 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
299a0 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
299b0 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
299c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
299d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
299e0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
299f0 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
29a00 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
29a10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29a20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29a30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29a40 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72     if (!IsSuppor
29a50 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73  tedRootKey(regis
29a60 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a  try, rootKey))..
29a70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
29a90 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
29aa0 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
29ab0 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
29ac0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
29ad0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
29ae0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29af0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29b00 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29b10 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
29b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b40 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
29b50 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
29b60 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
29b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29b80 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29ba0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
29bb0 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
29bc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29be0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
29bf0 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
29c00 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29c20 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29c30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29c40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
29c50 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
29c60 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
29c70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29c90 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
29ca0 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
29cb0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
29cc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29cd0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29ce0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29cf0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
29d00 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
29d10 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
29d20 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
29d30 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
29d40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29d50 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
29d60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
29d70 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
29d80 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
29d90 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
29da0 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
29db0 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
29dc0 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
29dd0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
29de0 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
29df0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
29e00 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
29e10 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
29e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e30 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
29e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
29e60 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
29e70 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
29e80 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
29e90 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
29ea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
29ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ed0 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
29ee0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
29ef0 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
29f00 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
29f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
29f30 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
29f40 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
29f50 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
29f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f80 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
29f90 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
29fa0 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
29fb0 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
29fc0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
29fd0 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
29fe0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
29ff0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
2a000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a010 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2a020 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
2a030 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
2a040 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
2a050 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
2a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a070 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2a080 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a090 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2a0a0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
2a0b0 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
2a0c0 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a0e0 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29  version != null)
2a0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a100 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a110 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a130 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c   // NOTE: Manual
2a140 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68 65   override of the
2a150 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b   *ONE* framework
2a160 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20   version..      
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a180 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73         to proces
2a190 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
2a1a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1c0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a1d0 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
2a1e0 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20  onList();..     
2a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2a200 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
2a210 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
2a220 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a  ion(version));..
2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a240 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a250 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2a260 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a280 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69  if (!frameworkLi
2a290 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47  st.Versions.TryG
2a2a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2a2d0 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f  ame, out framewo
2a2e0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c  rkVersionList) |
2a2f0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
2a300 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d             (fram
2a310 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2a320 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
2a330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a340 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a350 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2a360 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2a370 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a380 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3a0 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
2a3b0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2a3c0 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b  ion in framework
2a3d0 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20  VersionList)..  
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a400 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2a410 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2a420 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
2a430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a440 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a450 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a460 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2a470 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d  "frameworkName =
2a4a0 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56   {0}, frameworkV
2a4b0 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20  ersion = {1}, " 
2a4c0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2a4d0 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74             "plat
2a4e0 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c  formName = {2}",
2a4f0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2a500 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20  eworkName),..   
2a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a520 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2a530 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2a540 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2a550 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2a560 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e  isplay(platformN
2a570 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
2a580 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a5a0 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b   (!HaveFramework
2a5b0 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2a5e0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
2a5f0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2a600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
2a620 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55  atformName, perU
2a630 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
2a640 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2a680 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2a690 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2a6a0 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6c0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2a6d0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2a6e0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2a6f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a710 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2a720 30 7d 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20  0} registry not 
2a730 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20  found, " +..    
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a750 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
2a760 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
2a770 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
2a780 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2a7b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2a7d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a800 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
2a810 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
2a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a830 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2a840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a850 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
2a860 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a880 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
2a890 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2a8a0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
2a8d0 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  mName, clientDat
2a8e0 61 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  a, perUser, wow6
2a8f0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a910 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
2a920 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2a930 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a970 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2a9a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a9b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a9c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2a9d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2a9e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a9f0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2aa50 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20  gion Per-Visual 
2aa60 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48  Studio Version H
2aa70 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2aa80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2aa90 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
2aaa0 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  sList(..        
2aab0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2aac0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2aad0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
2aae0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
2aaf0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
2ab00 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76      ref VsList v
2ab10 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  sList..         
2ab20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2ab30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ab40 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  (vsList == null)
2ab50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ab60 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56    vsList = new V
2ab70 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  sList();....    
2ab80 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
2ab90 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
2aba0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2abb0 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74       vsList.Root
2abc0 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a  Key = rootKey;..
2abd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2abe0 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e   (vsList.Version
2abf0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2ac00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ac10 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2ac20 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  t.Versions = new
2ac30 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
2ac40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ac50 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ac60 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ac70 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ac80 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20 20  .NoVs2005)..    
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aca0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2acb0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2acc0 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d  8, 0)); // 2005.
2acd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ace0 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2acf0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ad00 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ad10 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
2ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad30 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2ad40 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ad50 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d  9, 0)); // 2008.
2ad60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ad70 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ad80 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ad90 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ada0 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20  .NoVs2010)..    
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adc0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2add0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ade0 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d  10, 0));// 2010.
2adf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ae00 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2ae10 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2ae20 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2ae30 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20 20  .NoVs2012)..    
2ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae50 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2ae60 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2ae70 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d  11, 0));// 2012.
2ae80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2ae90 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
2aea0 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
2aeb0 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
2aec0 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20 20  .NoVs2013)..    
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aee0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
2aef0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
2af00 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d  12, 0));// 2013.
2af10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2af20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2af30 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2af40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2af80 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2af90 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
2afa0 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
2afb0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2afc0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2afe0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b000 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2b010 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
2b020 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
2b030 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2b040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b050 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2b060 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2b070 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
2b080 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b090 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b0a0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2b0b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b0c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2b0d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b0e0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2b0f0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2b100 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2b110 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2b120 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b130 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2b140 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2b150 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2b160 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b180 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2b190 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
2b1a0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2b1b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b1c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2b1d0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
2b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b210 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
2b220 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
2b230 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2b250 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
2b260 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
2b270 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2b280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b290 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
2b2a0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
2b2b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b2c0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2b2d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2b2e0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
2b2f0 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b310 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
2b320 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
2b330 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2b340 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b350 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2b360 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
2b370 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
2b380 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2b3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3c0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2b3d0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2b3e0 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2b410 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2b420 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2b430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b440 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
2b450 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e  dio {0} found in
2b460 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
2b470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b480 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2b490 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f  y(vsVersion), Fo
2b4a0 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
2b4b0 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
2b4c0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2b4d0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2b4f0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2b500 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b510 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2b570 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2b580 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2b590 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2b5a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2b5b0 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
2b5c0 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
2b5d0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
2b5e0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72    MockRegistry r
2b5f0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
2b600 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
2b610 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
2b620 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
2b630 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
2b640 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
2b650 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
2b660 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
2b670 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2b680 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b690 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2b6a0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2b6b0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2b6c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2b6d0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2b6e0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2b6f0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2b700 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2b710 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b720 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2b730 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
2b740 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
2b750 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2b760 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b770 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
2b780 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2b790 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b7a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2b7b0 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
2b7c0 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
2b7d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b7e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b7f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2b800 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
2b810 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b820 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b830 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2b840 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
2b850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b860 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2b870 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2b880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2b890 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2b8a0 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
2b8b0 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
2b8c0 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
2b8d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2b8e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2b900 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
2b910 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
2b920 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b930 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2b940 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b950 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
2b960 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
2b970 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
2b980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b9a0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
2b9b0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
2b9c0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
2b9d0 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
2b9e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b9f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2ba00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ba10 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
2ba20 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2ba50 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
2ba60 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2ba90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2bab0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
2bac0 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
2bad0 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
2bae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2baf0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2bb00 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2bb10 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2bb20 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2bb40 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2bb50 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2bb60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
2bb80 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
2bb90 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
2bba0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2bbc0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2bbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bbe0 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
2bbf0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2bc10 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2bc20 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
2bc30 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
2bc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bc50 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2bc60 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2bc70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2bc90 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2bca0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2bcb0 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
2bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcd0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2bce0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2bcf0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd10 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
2bd20 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f 75  udio {0} not fou
2bd30 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  nd, skipping..."
2bd40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bd50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2bd60 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
2bd70 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2bd80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2bd90 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2bda0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2bdb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bdc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
2bdd0 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
2bde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bdf0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2be00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be10 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2be20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2be30 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2be40 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  y, vsVersion, su
2be50 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 63  ffix, package, c
2be60 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be80 20 20 20 20 70 65 72 55 73 65 72 2c 20 77 6f 77      perUser, wow
2be90 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
2bea0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2beb0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2bed0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
2bee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2bf10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2bf30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2bf40 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2bf50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bf60 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2bf70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2bfc0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2bfd0 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on Configuration
2bfe0 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a   File Handling..
2bff0 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
2c000 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
2c010 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
2c020 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
2c030 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2c040 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63  AddDbProviderFac
2c050 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
2c060 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2c070 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2c080 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
2c090 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2c0a0 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2c0b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c0c0 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2c0d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c0e0 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2c0f0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2c100 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2c110 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2c120 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2c130 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c140 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2c150 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2c160 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2c170 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2c180 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2c190 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2c1a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c1b0 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2c1d0 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2c1e0 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2c1f0 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2c200 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2c210 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2c220 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2c230 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2c240 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2c250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2c260 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2c270 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2c280 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2c290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c2a0 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2c2b0 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2c2c0 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
2c2d0 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
2c2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2c2f0 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20   (addElement == 
2c300 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c310 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c320 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65        string[] e
2c330 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d  lementNames = {.
2c340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c350 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
2c360 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
2c370 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
2c380 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
2c390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c3a0 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76   XmlElement prev
2c3b0 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  iousElement =.. 
2c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3d0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75     document.Docu
2c3e0 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20  mentElement; /* 
2c3f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
2c400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c410 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
2c420 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20  ing elementName 
2c430 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29  in elementNames)
2c440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c460 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2c470 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c  ent = previousEl
2c480 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ement.SelectSing
2c490 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4b0 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73   elementName) as
2c4c0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
2c4f0 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt == null)..   
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c510 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c520 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2c530 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2c540 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
2c550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2c570 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
2c580 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
2c5b0 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
2c5c0 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  (addElement);.. 
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
2c600 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64  iousElement = ad
2c610 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20  dElement;..     
2c620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c640 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2c650 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
2c660 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
2c670 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c            "add",
2c680 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2c690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c6a0 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2c6b0 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2c6c0 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20  ddElement);.... 
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c6e0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2c6f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c710 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2c720 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2c730 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a  ibute("name"),..
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67      name, String
2c760 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2c770 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2c780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c790 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2c7a0 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  SetAttribute("na
2c7b0 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  me", name);..   
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2c7d0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2c7e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c7f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2c800 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2c810 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2c820 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29  ute("invariant")
2c830 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c840 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74         invariant
2c850 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
2c860 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2c870 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c880 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2c890 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
2c8a0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2c8b0 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c8d0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2c8e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c8f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2c900 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2c910 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2c920 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
2c930 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on"),..         
2c940 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72             descr
2c950 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f  iption, StringCo
2c960 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2c970 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2c980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c990 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2c9a0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2c9b0 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69  ription", descri
2c9c0 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
2c9d0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2c9e0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2c9f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ca00 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c       string full
2ca10 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e  TypeName = Strin
2ca20 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b  g.Format("{0}, {
2ca30 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2ca40 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20        typeName, 
2ca50 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a  assemblyName);..
2ca60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ca70 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2ca80 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2ca90 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
2caa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2cab0 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
2cac0 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
2cad0 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
2cae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
2cb10 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
2cb20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb40 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2cb50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2cb60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2cb70 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2cb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cba0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbc0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2cbd0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2cbe0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2cbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc00 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2cc10 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2cc20 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2cc30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc50 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2cc60 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  }", ForDisplay(a
2cc70 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  ddElement)),..  
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2cca0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2ccb0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
2ccc0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2ccd0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2cce0 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
2ccf0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2cd00 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
2cd10 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
2cd20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
2cd30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2cd40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2cd50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2cd60 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2cd70 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2cd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cdc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2cdd0 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2cde0 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2cdf0 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2ce00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2ce10 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f  bool RemoveDbPro
2ce20 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2ce30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2ce40 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2ce50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ce60 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
2ce70 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2ce80 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2ce90 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2cea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2ceb0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2cec0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2ced0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2cee0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2cef0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cf00 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2cf10 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cf20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2cf30 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2cf40 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2cf60 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
2cf70 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
2cf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2cf90 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
2cfa0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2cfb0 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2cfc0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2cfd0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
2cfe0 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2cff0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2d000 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
2d010 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
2d020 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2d030 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2d040 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2d050 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
2d060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2d080 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2d090 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61  de.RemoveChild(a
2d0a0 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2d0c0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2d0d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2d0e0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
2d0f0 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ent removeElemen
2d100 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2d110 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d130 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2d140 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
2d150 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2d160 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2d170 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2d180 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
2d190 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2d1a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d1b0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
2d1c0 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2d1d0 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
2d1e0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d200 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2d210 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d220 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d230 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2d240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2d250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d260 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d280 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2d290 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2d2a0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2d2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d2c0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2d2d0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2d2e0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2d2f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d310 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2d320 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
2d330 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
2d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d350 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
2d360 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
2d370 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
2d380 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
2d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2d3a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2d3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d3c0 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
2d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3e0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
2d3f0 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d410 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
2d420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d430 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
2d440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d460 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2d470 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d480 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2d4d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d4e0 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2d4f0 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
2d500 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2d510 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2d520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2d530 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d550 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2d560 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2d570 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2d580 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2d590 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2d5a0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2d5b0 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2d5c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2d5d0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2d5e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d5f0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2d600 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d610 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2d620 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2d630 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2d640 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2d650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2d660 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2d670 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
2d680 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
2d690 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2d6a0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2d6b0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2d6c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
2d6d0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2d6e0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
2d6f0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
2d700 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
2d710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d720 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
2d730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2d740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d750 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2d760 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e  id framework con
2d770 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  fig callback dat
2d780 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
2d790 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2d7a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d7b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d7c0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
2d7d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2d7f0 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
2d800 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d820 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2d830 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
2d840 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2d850 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2d860 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
2d870 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
2d880 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
2d890 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8b0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2d8c0 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
2d8d0 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
2d8e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2d8f0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
2d900 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
2d910 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
2d920 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  d, ref error);..
2d930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d940 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
2d950 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d970 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
2d980 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
2d990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d9a0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
2d9b0 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
2d9c0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
2d9d0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2d9e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2d9f0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2da00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2da10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2da20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2da30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2da70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2da80 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
2da90 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
2daa0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2dab0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2dac0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
2dad0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2daf0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2db00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2db10 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2db20 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2db30 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2db40 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2db50 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2db60 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2db70 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2db80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2db90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2dba0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2dbb0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2dbc0 69 73 20 72 65 67 69 73 74 72 79 20 6b 65 79 20  is registry key 
2dbd0 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79  appears to alway
2dbe0 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79  s be 32-bit only
2dbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2dc00 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f         (i.e. pro
2dc10 62 61 62 6c 79 20 62 65 63 61 75 73 65 20 69 74  bably because it
2dc20 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79   is only used by
2dc30 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20   Visual..       
2dc40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74       //       St
2dc50 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63  udio, which is c
2dc60 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20  urrently always 
2dc70 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20  32-bit only)... 
2dc80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2dc90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2dca0 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
2dcb0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2dcc0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
2dcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dce0 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
2dcf0 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33  t\\{1}\\v{2}\\{3
2dd00 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
2dd10 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20  rsEx" :..       
2dd20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
2dd30 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
2dd40 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
2dd50 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
2dd60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2dd70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2dd80 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2dd90 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
2dda0 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
2ddb0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2ddc0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2ddd0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2dde0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
2ddf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2de00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2de50 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2de60 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
2de70 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2de80 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2de90 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2deb0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2dec0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2ded0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2dee0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2def0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2df00 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2df10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2df20 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
2df30 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2df40 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
2df50 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
2df60 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
2df70 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2df80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2df90 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2dfa0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2dfb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2dfc0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2dfd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2dfe0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2dff0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2e000 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
2e010 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2e020 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2e030 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
2e040 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2e050 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
2e060 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  me, perUser,..  
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f                wo
2e080 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  w64);....       
2e090 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e0a0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
2e0b0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2e0c0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0e0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2e0f0 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  me, true, whatIf
2e100 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2e110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2e120 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e130 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2e150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e160 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2e170 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e190 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2e1a0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2e1b0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1d0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2e1e0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e200 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e230 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2e240 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2e250 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2e260 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2e270 28 0d 0a 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 6b 65 79 2c 20             key, 
2e290 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
2e2a0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e2d0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2e2e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e310 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e320 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2e330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2e350 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2e360 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2e370 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e390 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
2e3a0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e3e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e400 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2e410 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e430 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64   subKey, null, d
2e440 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66  irectory, whatIf
2e450 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e480 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2e490 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2e4a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2e500 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2e510 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f  c bool RemoveFro
2e520 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
2e530 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
2e540 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2e550 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
2e560 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
2e570 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
2e580 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2e590 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e5a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2e5b0 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
2e5c0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e5d0 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
2e5e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2e5f0 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
2e600 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e610 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2e620 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2e630 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2e640 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2e650 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2e660 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2e670 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2e680 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2e690 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e6a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e6b0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2e6c0 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
2e6d0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
2e6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6f0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
2e700 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e710 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
2e720 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2e730 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 29            wow64)
2e740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e750 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2e760 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2e770 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2e780 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2e7a0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2e7b0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2e7c0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2e7d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e7e0 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2e7f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e820 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2e830 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2e840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e850 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2e860 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e870 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2e8a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2e8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e8c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e8f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2e900 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
2e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e920 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
2e930 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
2e940 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
2e950 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2e960 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e970 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2e980 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2e990 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2e9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2e9e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2e9f0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
2ea00 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
2ea10 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
2ea20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2ea30 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2ea40 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ea50 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
2ea60 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2ea70 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2ea80 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2ea90 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
2eaa0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2eab0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
2eac0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
2ead0 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2eae0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2eaf0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2eb00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2eb10 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2eb20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2eb30 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2eb40 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2eb50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2eb60 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2eb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2eb80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2eb90 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
2eba0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
2ebb0 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
2ebc0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
2ebd0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
2ebe0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2ebf0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
2ec00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ec10 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ec20 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d   = "invalid fram
2ec30 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64  ework callback d
2ec40 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
2ec50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ec60 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ec70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ec80 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ecb0 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
2ecc0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
2ecd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ece0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
2ecf0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2ed00 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2ed10 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
2ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed30 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74     LegacyProject
2ed40 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2ed50 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68 61  ow64, false, wha
2ed60 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed80 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26     ref error) &&
2ed90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eda0 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46    AddToAssemblyF
2edb0 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2edd0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
2ede0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2edf0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2ee00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2ee10 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
2ee20 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70  tName, pair.X, p
2ee30 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77  erUser, wow64, w
2ee40 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee60 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2ee70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ee80 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2ee90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2eea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2eeb0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
2eec0 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
2eed0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
2eee0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2eef0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
2ef00 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2ef10 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2ef20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ef30 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d        ProjectNam
2ef40 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
2ef50 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
2ef60 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  g, whatIf,..    
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef80 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
2ef90 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2efa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2efb0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2efc0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f010 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f020 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
2f030 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d  Studio Handling.
2f040 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2f050 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2f060 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
2f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2f080 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2f090 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2f0a0 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
2f0b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2f0c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2f0d0 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
2f0e0 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2f0f0 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d  \VisualStudio",.
2f100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f110 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
2f120 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 29  perUser, wow64))
2f130 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2f140 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2f150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2f190 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2f1a0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2f1b0 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a   GetVsKeyName(..
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2f1d0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2f1f0 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
2f200 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2f210 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2f220 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2f230 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f240 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f250 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2f260 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f280 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
2f290 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f2a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2c0 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47  "{0}\\{1}{2}", G
2f2d0 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  etVsRootKeyName(
2f2e0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
2f2f0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 66               suf
2f310 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  fix);..        }
2f320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f370 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2f380 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
2f390 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65  udio Data Source
2f3a0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2f3b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2f3c0 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
2f3d0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
2f3e0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2f3f0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2f400 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2f410 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2f420 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2f430 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20  g suffix,..     
2f440 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2f450 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2f460 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2f470 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2f480 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2f490 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2f4a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2f4b0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2f4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2f4d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2f4f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f500 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2f510 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2f520 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f540 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2f550 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2f560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f570 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f580 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f590 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2f5a0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2f5b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f5d0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2f5e0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f600 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f620 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2f630 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2f640 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2f650 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
2f660 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2f670 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2f680 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2f690 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2f6a0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2f6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f6c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2f6d0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2f6e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2f6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2f700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f710 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2f720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f740 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2f750 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2f760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f770 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f780 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f790 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2f7a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2f7c0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2f7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2f7f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2f800 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f810 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f820 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f830 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2f840 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2f850 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2f870 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22  y, "DataSources"
2f880 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2f890 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2f8a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2f8d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f8e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f900 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2f910 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f940 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f950 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2f960 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20  aSources",..    
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2f990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f9b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9e0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2f9f0 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61  RegistryKey data
2fa00 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20  SourceKey =..   
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2fa30 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2fa40 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20  bKey(subKey,..  
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa60 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2fa70 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
2fa80 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2fa90 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fab0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2fac0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2fad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72      if (dataSour
2fb00 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ceKey == null)..
2fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2fb50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2fb80 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
2fb90 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2fba0 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a  0}\\{1}", key,..
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbd0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
2fbe0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
2fbf0 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2fc20 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2fc60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2fc70 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc90 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b       dataSourceK
2fca0 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67  ey, null, String
2fcb0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcd0 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62        "{0} Datab
2fce0 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65  ase File", Proje
2fcf0 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c  ctName), whatIf,
2fd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2fd20 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fd60 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c  / NOTE: This val
2fd70 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20  ue is new as of 
2fd80 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20  1.0.83.0...     
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2fdc0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2fdd0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b       dataSourceK
2fe00 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76  ey, "DefaultProv
2fe10 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20  ider",..        
2fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe30 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2fe40 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
2fe50 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2fe60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2fe80 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
2fe90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fea0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2feb0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2fec0 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63  SubKey(dataSourc
2fed0 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fef0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
2ff00 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76  ("SupportingProv
2ff10 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20  iders\\{0}",..  
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2ff40 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
2ff50 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
2ff60 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff80 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2ff90 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ffd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
2ffe0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2fff0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30000 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30040 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
30050 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
30060 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
30070 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
30080 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
30090 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
300a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
300b0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
300c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
300d0 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
300e0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
300f0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
30100 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
30110 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
30120 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
30130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
30140 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
30150 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
30160 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
30170 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
30180 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
30190 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
301a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
301b0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
301c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
301d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
301e0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
301f0 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
30200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30210 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
30220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
30230 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
30240 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
30250 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30270 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
30280 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
30290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
302a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
302b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
302c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
302d0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
302e0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
302f0 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
30300 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
30310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
30320 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
30330 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
30340 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
30350 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
30360 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
30370 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
30380 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
30390 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
303a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
303b0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
303c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
303d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
303f0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
30400 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
30420 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
30430 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
30440 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
30450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30460 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
30470 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
30480 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
30490 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
304a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
304b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
304c0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
304d0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
304e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
304f0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
30500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30510 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75     key, "DataSou
30520 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  rces", true, wha
30530 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
30540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30560 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
30570 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
305a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
305b0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
305c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
305d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
305e0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
305f0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
30600 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d  \\DataSources",.
30610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30620 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
30630 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30650 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
30680 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
30690 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
306a0 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306c0 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
306d0 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
306e0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
306f0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
30700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30710 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
30720 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30730 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30740 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30750 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
30760 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
30770 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
307b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
307c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
307d0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
307e0 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65  cessVsDataSource
307f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
30800 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
30810 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
30820 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
30830 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
30840 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
30850 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
30860 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
30870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
30880 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
30890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
308a0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
308b0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
308c0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
308d0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
308e0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
308f0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
30900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30910 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
30920 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
30930 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
30940 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
30950 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30960 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
30970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
30980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30990 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
309a0 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
309b0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
309c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
309d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
309e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
309f0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
30a00 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
30a10 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
30a20 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
30a30 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
30a40 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
30a50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30a60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30a70 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
30a80 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
30a90 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
30aa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30ab0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30ac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
30ad0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
30ae0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
30af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b00 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
30b10 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30b30 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
30b40 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
30b50 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ge, perUser, wow
30b60 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
30b70 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
30b80 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
30b90 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
30ba0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
30bb0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
30bc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30bd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
30be0 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
30bf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30c00 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
30c10 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
30c20 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55  x, package, perU
30c30 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  ser, wow64,..   
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c50 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
30c60 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
30c70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
30c80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30c90 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
30ca0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
30cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
30cf0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
30d00 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
30d10 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61  Data Provider Ha
30d20 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
30d30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
30d40 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f  ool AddVsDataPro
30d50 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
30d60 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
30d70 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
30d80 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
30d90 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
30da0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
30db0 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
30dc0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
30dd0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
30de0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
30df0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
30e00 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
30e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
30e20 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
30e30 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
30e40 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30e50 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
30e60 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
30e70 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
30e80 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
30e90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30ea0 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
30eb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30ec0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30ed0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30ee0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
30ef0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
30f00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30f10 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30f30 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
30f40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30f60 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30f70 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
30f80 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
30f90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30fa0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30fb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30fc0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
30fd0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
30fe0 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
30ff0 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
31000 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
31010 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
31020 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
31030 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
31040 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
31070 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
31080 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
31090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
310b0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
310e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
310f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
31120 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
31130 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
31140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31150 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
31160 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
31170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31180 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
31190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
311a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
311b0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
311c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
311d0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
311e0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
311f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31200 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
31210 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  "DataProviders",
31220 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
31230 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
31270 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31280 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
312b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
312c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312d0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
312e0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
312f0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
31300 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20  Providers",..   
31310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31320 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
31330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31340 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
31350 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31380 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
31390 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
313a0 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a  aProviderKey =..
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313c0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
313d0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
313e0 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
313f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31400 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31410 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
31420 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
31430 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
31460 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
31470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31490 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74           if (dat
314a0 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20  aProviderKey == 
314b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
314c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
314d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
314f0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
31500 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31520 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
31530 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
31540 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
31550 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
31560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31570 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
31580 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
31590 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
315a0 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
315d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
315e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
315f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31600 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
31610 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
31620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
31640 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e  taProviderKey, n
31650 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e  ull, Description
31660 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
31670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31680 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
31690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
316a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
316b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316c0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
316d0 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
316e0 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
316f0 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20  0.  However,..  
31700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31710 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
31720 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65  t should only be
31730 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63 6b   set if the pack
31740 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  age assembly..  
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
31770 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d  nd all the assem
31780 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73 20  blies it refers 
31790 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20  to are being..  
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
317c0 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67  laced into the g
317d0 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63  lobal assembly c
317e0 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ache...         
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31800 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
31810 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
31820 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73  ackage.GlobalAss
31830 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20  emblyCache)..   
31840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31880 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
318b0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
318c0 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20  Assembly",..    
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
318f0 61 67 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65  age.AssemblyName
31900 2e 54 6f 53 74 72 69 6e 67 28 29 2c 0d 0a 20 20  .ToString(),..  
31910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
31930 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
31940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31950 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31970 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
319a0 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
319b0 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20  of 1.0.83.0...  
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
319e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319f0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
31a00 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
31a30 69 64 65 72 4b 65 79 2c 20 22 41 73 73 6f 63 69  iderKey, "Associ
31a40 61 74 65 64 53 6f 75 72 63 65 22 2c 0d 0a 20 20  atedSource",..  
31a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a60 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
31a70 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
31a80 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
31a90 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31ac0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31ae0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
31af0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b10 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
31b20 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74  rKey, "Invariant
31b30 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74  Name", Invariant
31b40 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
31b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b60 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
31b70 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
31b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
31ba0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
31bd0 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f  erKey, "Technolo
31be0 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  gy",..          
31bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c00 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74    package.AdoNet
31c10 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53  TechnologyId.ToS
31c20 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
31c30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c50 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31c60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31c80 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
31c90 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
31cc0 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20  ey, "CodeBase", 
31cd0 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
31ce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
31d00 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
31d30 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
31d60 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74  oviderKey, "Fact
31d70 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20  oryService",..  
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d90 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
31da0 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
31db0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
31dc0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31de0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
31df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31e00 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
31e10 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
31e20 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
31e30 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
31e60 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
31e70 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c  nectionUIControl
31e80 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
31e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ea0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
31ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
31ed0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
31ee0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
31ef0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f10 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
31f20 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
31f30 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69  nnectionProperti
31f40 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f60 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
31f70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
31f90 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
31fa0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
31fb0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fd0 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
31fe0 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
31ff0 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72  ConnectionSuppor
32000 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
32030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32050 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
32060 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
32070 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
320a0 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f  edObjects\\DataO
320b0 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77  bjectSupport", w
320c0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
320d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320e0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
320f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32100 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
32110 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
32120 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
32130 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
32160 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75  ects\\DataViewSu
32170 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
32180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
321a0 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
321b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
321d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
321e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
321f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
32200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
32260 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
32270 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
32280 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
32290 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
322a0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
322b0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
322c0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
322d0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
322e0 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
322f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
32300 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
32310 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
32320 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
32330 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
32340 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
32350 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
32360 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
32370 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
32380 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
32390 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
323a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
323b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
323c0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
323d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
323e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
323f0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
32400 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
32410 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
32420 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
32450 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
32460 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
32470 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20  ersion, suffix, 
32480 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b  perUser, wow64);
32490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
324a0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
324b0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
324c0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
324d0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
324e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
324f0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
32500 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
32510 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
32520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32530 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
32540 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32550 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
32560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32570 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
32580 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
32590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325a0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
325b0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
325c0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
325f0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
32600 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32610 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32620 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32640 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
32650 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
32660 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
32670 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32690 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
326a0 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
326b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
326c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
326d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
326e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
326f0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
32700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32710 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32730 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
32740 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32760 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
32770 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
32780 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
32790 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327b0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
327e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
327f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32810 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
32820 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
32830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32840 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
32850 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72  , package.DataPr
32860 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e  oviderId.ToStrin
32870 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
32880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32890 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
328a0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
328b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
328c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
328d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
328e0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
328f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
32900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32940 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32950 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
32960 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
32970 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
32980 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
32990 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
329a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
329b0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
329c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
329d0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
329e0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
329f0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
32a00 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
32a10 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
32a20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
32a30 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
32a40 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
32a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32a60 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
32a70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32a80 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
32a90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
32aa0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
32ab0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
32ac0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
32ad0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
32af0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
32b00 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
32b10 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
32b20 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
32b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
32b40 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
32b50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32b70 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
32b80 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
32b90 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
32ba0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32bd0 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
32be0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32bf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32c00 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  rn AddVsDataProv
32c10 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
32c20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
32c30 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
32c40 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
32c50 70 61 69 72 2e 58 2c 20 70 65 72 55 73 65 72 2c  pair.X, perUser,
32c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32c70 20 20 20 20 20 20 77 6f 77 36 34 2c 20 77 68 61        wow64, wha
32c80 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
32c90 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
32ca0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
32cb0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
32cc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32cd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
32ce0 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  n RemoveVsDataPr
32cf0 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32d10 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
32d20 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65   suffix, package
32d30 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
32d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32d50 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
32d60 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
32d70 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
32d80 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
32d90 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
32da0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
32db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32df0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32e00 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
32e10 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61  tudio Package Ha
32e20 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
32e30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
32e40 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
32e50 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
32e60 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
32e70 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
32e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32e90 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
32ea0 79 43 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20  yCache,..       
32eb0 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
32ec0 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
32ed0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
32ee0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32ef0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
32f00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32f20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
32f30 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
32f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f50 20 70 61 63 6b 61 67 65 2e 41 73 73 65 6d 62 6c   package.Assembl
32f60 79 4e 61 6d 65 20 3d 20 61 73 73 65 6d 62 6c 79  yName = assembly
32f70 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
32f80 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 47         package.G
32f90 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
32fa0 68 65 20 3d 20 67 6c 6f 62 61 6c 41 73 73 65 6d  he = globalAssem
32fb0 62 6c 79 43 61 63 68 65 3b 0d 0a 0d 0a 20 20 20  blyCache;....   
32fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
32fd0 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e  kage.AdoNetTechn
32fe0 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47 75  ologyId = new Gu
32ff0 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
33000 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39 41           "77AB9A
33010 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31 41  9D-78B9-4BA7-91A
33020 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22 29  C-873F5338F1D2")
33030 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33040 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63       package.Pac
33050 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75 69  kageId = new Gui
33060 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
33070 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
33080 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
33090 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29 3b  -98FF74C64D9C");
330a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
330b0 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
330c0 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64  iceId = new Guid
330d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
330e0 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38 44         "DCBE6C8D
330f0 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d  -0E57-4099-A183-
33100 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b 0d  98FF74C64D9D");.
33110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33120 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
33130 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47 75  ourceId = new Gu
33140 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
33150 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
33160 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
33170 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 29  F-CBE6BF058C71")
33180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33190 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
331a0 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e 65  aProviderId = ne
331b0 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
331d0 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
331e0 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
331f0 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  70");..         
33200 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
33210 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
33220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33260 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
33270 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
33280 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d  l AddVsPackage(.
33290 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
332a0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
332b0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
332c0 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
332d0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
332e0 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
332f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
33300 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
33310 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33320 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
33330 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33340 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
33350 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
33360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
33370 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
33380 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
33390 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
333a0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
333b0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
333c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
333d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
333e0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
333f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33410 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
33420 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
33430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33440 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
33450 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
33470 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
33480 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
334a0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
334b0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
334c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
334d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
334e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
334f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
33500 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
33510 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
33520 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
33530 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
33540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
33550 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33560 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
33570 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
33580 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
33590 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
335a0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
335b0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
335c0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
335d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
335e0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
335f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33600 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33620 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
33630 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
33640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33650 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
33660 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
33670 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
33680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33690 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
336a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
336b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
336c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
336d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
336e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
336f0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
33700 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
33710 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
33720 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
33730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33740 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
33750 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
33760 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
33780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33790 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
337a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
337b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
337c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
337d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
337e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
337f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
33810 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
33820 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
33830 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
33840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33850 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
33860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33880 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
33890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
338a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
338b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
338c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
338d0 4e 4f 54 45 3a 20 2a 57 41 52 4e 49 4e 47 2a 20  NOTE: *WARNING* 
338e0 43 68 61 6e 67 69 6e 67 20 61 6e 79 20 6f 66 20  Changing any of 
338f0 74 68 65 73 65 20 76 61 6c 75 65 73 20 77 69 6c  these values wil
33900 6c 20 6c 69 6b 65 6c 79 0d 0a 20 20 20 20 20 20  l likely..      
33910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33920 20 20 20 20 20 20 20 72 65 71 75 69 72 65 20 61         require a
33930 20 6e 65 77 20 22 70 61 63 6b 61 67 65 20 6c 6f   new "package lo
33940 61 64 20 6b 65 79 22 20 28 50 4c 4b 29 20 74 6f  ad key" (PLK) to
33950 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
33960 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
33970 20 20 67 65 6e 65 72 61 74 65 64 20 69 6e 20 6f    generated in o
33980 72 64 65 72 20 74 6f 20 70 72 6f 70 65 72 6c 79  rder to properly
33990 20 73 75 70 70 6f 72 74 20 6c 6f 61 64 69 6e 67   support loading
339a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
339b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
339c0 20 20 20 70 61 63 6b 61 67 65 20 69 6e 74 6f 20     package into 
339d0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
339e0 30 38 20 61 6e 64 20 65 61 72 6c 69 65 72 20 77  08 and earlier w
339f0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20  ithout..        
33a00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
33a10 20 20 20 20 20 74 68 65 20 6d 61 74 63 68 69 6e       the matchin
33a20 67 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  g Visual Studio 
33a30 53 44 4b 20 62 65 69 6e 67 20 69 6e 73 74 61 6c  SDK being instal
33a40 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...          
33a50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
33a60 20 20 20 50 6c 65 61 73 65 20 72 65 66 65 72 20     Please refer 
33a70 74 6f 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44  to the "SQLite.D
33a80 65 73 69 67 6e 65 72 5c 70 6c 6b 2e 74 78 74 22  esigner\plk.txt"
33a90 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20   file..         
33aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
33ab0 20 20 20 20 66 6f 72 20 74 68 65 20 65 78 69 73      for the exis
33ac0 74 69 6e 67 20 6f 66 66 69 63 69 61 6c 20 76 61  ting official va
33ad0 6c 75 65 73 20 61 6e 64 20 75 70 64 61 74 65 20  lues and update 
33ae0 74 68 65 6d 20 69 66 0d 0a 20 20 20 20 20 20 20  them if..       
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33b00 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 2e        necessary.
33b10 20 20 41 6c 73 6f 2c 20 74 68 65 20 6e 65 77 6c    Also, the newl
33b20 79 20 67 65 6e 65 72 61 74 65 64 20 70 61 63 6b  y generated pack
33b30 61 67 65 20 6c 6f 61 64 0d 0a 20 20 20 20 20 20  age load..      
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33b50 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c         key itsel
33b60 66 2c 20 77 68 69 63 68 20 69 73 20 61 20 31 32  f, which is a 12
33b70 38 20 63 68 61 72 61 63 74 65 72 20 61 6c 70 68  8 character alph
33b80 61 6e 75 6d 65 72 69 63 0d 0a 20 20 20 20 20 20  anumeric..      
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33ba0 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 6d         string, m
33bb0 75 73 74 20 62 65 20 70 6c 61 63 65 64 20 69 6e  ust be placed in
33bc0 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 73 74   the resource st
33bd0 72 69 6e 67 20 6e 61 6d 65 64 0d 0a 20 20 20 20  ring named..    
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 2f 2f 20 20 20 20 20 20 20 22 34 30 30 22 20 69  //       "400" i
33c00 6e 20 74 68 65 20 22 53 51 4c 69 74 65 2e 44 65  n the "SQLite.De
33c10 73 69 67 6e 65 72 5c 56 53 50 61 63 6b 61 67 65  signer\VSPackage
33c20 2e 72 65 73 78 22 20 66 69 6c 65 0d 0a 20 20 20  .resx" file..   
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c40 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
33c50 65 6e 20 74 68 65 20 64 65 73 69 67 6e 65 72 20  en the designer 
33c60 61 73 73 65 6d 62 6c 79 20 69 74 73 65 6c 66 20  assembly itself 
33c70 6d 75 73 74 20 62 65 0d 0a 20 20 20 20 20 20 20  must be..       
33c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
33c90 20 20 20 20 20 20 72 65 63 6f 6d 70 69 6c 65 64        recompiled
33ca0 2e 20 20 41 73 20 6f 66 20 74 68 69 73 20 77 72  .  As of this wr
33cb0 69 74 69 6e 67 20 28 69 6e 20 46 65 62 72 75 61  iting (in Februa
33cc0 72 79 20 32 30 31 32 29 2c 0d 0a 20 20 20 20 20  ry 2012),..     
33cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33ce0 2f 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c 6c  /       the foll
33cf0 6f 77 69 6e 67 20 55 52 4c 20 69 73 20 74 68 65  owing URL is the
33d00 20 70 72 6f 70 65 72 20 70 6c 61 63 65 20 74 6f   proper place to
33d10 20 67 65 6e 65 72 61 74 65 0d 0a 20 20 20 20 20   generate..     
33d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33d30 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  /       package 
33d40 6c 6f 61 64 20 6b 65 79 73 3a 0d 0a 20 20 20 20  load keys:..    
33d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d60 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
33d70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
33d80 20 68 74 74 70 3a 2f 2f 6d 73 64 6e 2e 6d 69 63   http://msdn.mic
33d90 72 6f 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73  rosoft.com/en-us
33da0 2f 76 73 74 75 64 69 6f 2f 63 63 36 35 35 37 39  /vstudio/cc65579
33db0 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  5..             
33dc0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
33dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
33de0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33df0 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79  ryKey packageKey
33e00 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
33e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
33e30 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
33e40 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
33e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e60 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
33e70 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
33e80 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
33e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
33eb0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
33ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ee0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
33ef0 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ageKey == null).
33f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33f40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
33f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f70 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
33f80 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
33f90 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
33fc0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
33fd0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
33fe0 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34010 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34030 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34040 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
34050 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
34060 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
34070 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
34080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34090 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
340a0 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
340b0 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
340c0 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
340d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340e0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
340f0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
34100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34110 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
34120 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
34130 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a  eKey, "Class",..
34140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34150 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
34160 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c  ite.Designer.SQL
34170 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61  itePackage", wha
34180 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
341a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
341b0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
341c0 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43  e(packageKey, "C
341d0 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20  odeBase",..     
341e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
341f0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
34200 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34210 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34230 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34240 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
34250 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61  , "ID", 400, wha
34260 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
34270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34280 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
34290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
342b0 72 65 63 74 6f 72 79 20 3d 20 47 65 74 53 79 73  rectory = GetSys
342c0 74 65 6d 44 69 72 65 63 74 6f 72 79 28 77 6f 77  temDirectory(wow
342d0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
342e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
342f0 69 66 20 28 64 69 72 65 63 74 6f 72 79 20 3d 3d  if (directory ==
34300 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
34310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34320 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
34330 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
34340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34350 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
34360 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
34370 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e  (packageKey, "In
34380 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a  procServer32",..
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343a0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74 68              Path
343b0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
343c0 72 79 2c 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c  ry, "mscoree.dll
343d0 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
343e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34400 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
34420 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
34430 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
34440 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c  , "CompanyName",
34450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
34470 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74  ttp://system.dat
34480 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20  a.sqlite.org/", 
34490 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
344a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
344c0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
344d0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
344e0 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a   "MinEdition",..
344f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34500 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61              "sta
34510 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20  ndard", whatIf, 
34520 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
34530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34540 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
34550 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
34560 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63  kageKey, "Produc
34570 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  tName",..       
34580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34590 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
345a0 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
345b0 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65   Package", Proje
345c0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
345d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
345e0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
345f0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
34600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34610 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
34620 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
34630 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56  geKey, "ProductV
34640 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20  ersion",..      
34650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34660 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61        "1.0", wha
34670 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34690 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
346a0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
346b0 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20   toolboxKey =.. 
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
346e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
346f0 65 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61  eateSubKey(packa
34700 67 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  geKey,..        
34710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34720 20 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78          "Toolbox
34730 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
34740 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
34750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
34760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34780 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e  (toolboxKey == n
34790 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
347a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
347c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
347e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
347f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34810 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
34820 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
34830 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
34840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34850 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
34860 54 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67  Toolbox", packag
34870 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  eKey);....      
34880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34890 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
348a0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348e0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
348f0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34920 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66  toolboxKey, "Def
34930 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20  ault Items", 3, 
34940 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34960 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
34970 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
34980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
349b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
349c0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
349d0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
349e0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
349f0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
34a00 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
34a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
34a20 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75  ey, "Menus", tru
34a30 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
34a40 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
34a50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
34a70 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
34a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34a90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ab0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
34ac0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
34ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ae0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
34af0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
34b00 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d  y: {0}\\Menus",.
34b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
34b30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34b50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34b80 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
34b90 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
34ba0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
34bb0 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
34bc0 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b  ey, package.Pack
34bd0 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
34be0 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c00 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22       ", 1000, 3"
34c10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
34c20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
34c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34c40 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
34c50 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
34c60 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
34c70 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
34c80 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
34c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
34ca0 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74  y, "Services", t
34cb0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
34cc0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
34cd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34cf0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
34d00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34d10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34d40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34d60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34d70 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34d80 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63  key: {0}\\Servic
34d90 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
34dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34dd0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34df0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
34e10 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
34e20 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79  ryKey serviceKey
34e30 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e50 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
34e60 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
34e70 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e90 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
34ea0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
34eb0 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
34ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
34ee0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
34f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f10 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72 76          if (serv
34f20 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  iceKey == null).
34f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34f70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
34fb0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
34fc0 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
34fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
34ff0 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
35000 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
35010 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35030 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35040 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
35050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35060 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
35070 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
35080 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
35090 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c  alue(serviceKey,
350a0 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350c0 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b      package.Pack
350d0 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
350e0 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
350f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35110 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
35120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35130 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
35140 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65  lper.SetValue(se
35150 72 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22  rviceKey, "Name"
35160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
35180 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
35190 7d 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 69  } Designer Servi
351a0 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ce", ProjectName
351b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
351c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351d0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
351e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
351f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35200 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
35210 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35220 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35230 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35240 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
35250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35290 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
352a0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
352b0 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b  ool RemoveVsPack
352c0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
352d0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
352e0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
352f0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
35300 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
35310 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
35320 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
35330 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
35340 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
35350 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
35360 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
35370 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
35380 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
35390 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
353a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
353b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
353c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
353d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
353e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
353f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
35400 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35410 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
35420 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
35430 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35440 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35450 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
35460 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
35470 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35480 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
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 69 66 20 28 70 61 63 6b 61         if (packa
354b0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
354c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
354d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
354e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
354f0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
35500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35510 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
35530 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
35540 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
35550 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
35560 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c  suffix, perUser,
35570 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
35580 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
35590 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
355a0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
355b0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
355c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
355d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
355e0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
355f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
35600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35620 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
35630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35650 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
35660 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
35670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35680 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
35690 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
356a0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
356b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
356c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
356d0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
356e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
356f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
35700 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
35710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35720 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
35730 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
35740 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
35750 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
35760 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
35770 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
35780 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
35790 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
357a0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
357b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
357d0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
357e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
357f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35810 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
35820 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
35830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35840 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
35850 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
35860 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
35870 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35890 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
358a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
358b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
358c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
358d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
358e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
358f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
35900 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35920 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
35930 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
35940 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
35950 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
35960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35970 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35980 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
35990 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
359a0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
359b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
359c0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
359d0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
359e0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
359f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
35a00 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c  , "Menus", true,
35a10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
35a20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
35a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
35a50 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
35a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
35a90 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35aa0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35ad0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35ae0 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20   {0}\\Menus",.. 
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b00 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
35b10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35b20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35b30 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
35b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35b50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35b60 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35b70 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61 6c  Helper.DeleteVal
35b80 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
35b90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
35ba0 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
35bb0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
35bc0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35be0 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
35bf0 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
35c00 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35c10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
35c30 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
35c40 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
35c50 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
35c60 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c80 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73    key, "Services
35c90 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
35ca0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cd0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
35ce0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
35cf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
35d20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
35d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d40 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
35d50 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
35d60 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65  try key: {0}\\Se
35d70 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  rvices",..      
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d90 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
35dc0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
35dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35df0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35e00 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
35e10 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
35e30 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72  Key, package.Ser
35e40 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  viceId.ToString(
35e50 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e70 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
35e80 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35ea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35eb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35ec0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
35ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
35f30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
35f40 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b  ol ProcessVsPack
35f50 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
35f60 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
35f70 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
35f80 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
35f90 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
35fa0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
35fb0 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
35fc0 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
35fd0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
35fe0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
35ff0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
36000 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
36010 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36020 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
36030 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
36040 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
36050 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
36060 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
36070 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
36080 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
36090 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
360a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
360b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
360c0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
360d0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
360e0 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
360f0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
36100 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
36110 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
36120 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36140 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36150 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
36160 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
36190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
361a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
361b0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
361c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
361d0 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
361e0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
361f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36200 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
36210 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
36220 67 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  ge, pair.X, perU
36230 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
36240 20 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c            wow64,
36250 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
36260 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
36270 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36280 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
36290 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
362a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
362b0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61  eturn RemoveVsPa
362c0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
362d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
362e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
362f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
36300 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
36310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36320 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
36330 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
36340 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
36350 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
36360 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
36370 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
36380 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
36390 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
363a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
363e0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
363f0 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69     #region Appli
36400 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69  cation Entry Poi
36410 6e 74 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74  nt..        [Met
36420 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
36430 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
36440 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
36450 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
36460 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20  nt Main(..      
36470 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
36480 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rgs..           
36490 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
364a0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
364b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
364d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
364e0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c  figuration = nul
364f0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
36500 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
36510 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
36520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
36570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36580 72 65 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20  region Debugger 
36590 48 6f 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  Hook..          
365a0 20 20 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f        if (Enviro
365b0 6e 6d 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e  nment.GetEnviron
365c0 6d 65 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72  mentVariable("Br
365d0 65 61 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eak") != null)..
365e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36600 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
36610 72 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20  riteLine(..     
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36630 20 20 20 22 41 74 74 61 63 68 20 61 20 64 65 62     "Attach a deb
36640 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73  ugger to process
36650 20 7b 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20   {0} and " +..  
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36670 20 20 20 20 20 20 22 70 72 65 73 73 20 61 6e 79        "press any
36680 20 6b 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65   key to continue
36690 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
366a0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
366b0 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50  cess.GetCurrentP
366c0 72 6f 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d  rocess().Id);...
366d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
366e0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36710 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
36720 2e 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20  .ReadKey(true); 
36730 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36760 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
36770 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
36780 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
36790 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
367c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
367d0 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36800 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
36810 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
36820 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
36850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
36860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
368a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
368b0 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64   #region Command
368c0 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67   Line Processing
368d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368e0 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61    if (!Configura
368f0 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a  tion.FromArgs(..
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36910 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74 72          args, tr
36920 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72  ue, ref configur
36930 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72  ation, ref error
36940 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
36950 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
36960 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73  guration.Process
36970 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36980 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
36990 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
369a0 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
369b0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
369c0 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67           !Config
369d0 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e  uration.CheckRun
369e0 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
369f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a00 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
36a10 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65  ion, true, ref e
36a20 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
36a30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
36a50 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
36a60 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
36a70 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
36aa0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
36ab0 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
36ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36ad0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
36ae0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
36af0 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
36b00 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
36b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
36b20 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
36b30 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
36b40 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
36b50 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
36b60 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
36b70 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
36b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b90 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
36ba0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
36bb0 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d  ck, "Failure.",.
36bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36bd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
36be0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
36bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c00 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
36c10 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
36c20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
36c30 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
36c40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
36c50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
36c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
36ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
36cb0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
36cc0 20 72 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20   registry = new 
36cd0 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  MockRegistry(.. 
36ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cf0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36d00 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c  tion.WhatIf, fal
36d10 73 65 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  se, false))..   
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 72 65      #region Core
36d50 20 41 73 73 65 6d 62 6c 79 20 4e 61 6d 65 20 43   Assembly Name C
36d60 68 65 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  heck..          
36d70 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
36d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d90 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 6f 20 74 68    // NOTE: Do th
36da0 69 73 20 66 69 72 73 74 2c 20 62 65 66 6f 72 65  is first, before
36db0 20 6d 61 6b 69 6e 67 20 61 6e 79 20 63 68 61 6e   making any chan
36dc0 67 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  ges to the..    
36dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36de0 2f 2f 20 20 20 20 20 20 20 73 79 73 74 65 6d 2c  //       system,
36df0 20 62 65 63 61 75 73 65 20 69 74 20 77 69 6c 6c   because it will
36e00 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
36e10 69 6f 6e 20 69 66 20 74 68 65 0d 0a 20 20 20 20  ion if the..    
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e30 2f 2f 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61  //       file na
36e40 6d 65 20 64 6f 65 73 20 6e 6f 74 20 72 65 70 72  me does not repr
36e50 65 73 65 6e 74 20 61 20 76 61 6c 69 64 20 6d 61  esent a valid ma
36e60 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..         
36e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
36e80 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20      assembly... 
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
36eb0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
36ec0 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65  blyName coreAsse
36ed0 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  mblyName =..    
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ef0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
36f00 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65  .GetAssemblyName
36f10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
36f30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72  onfiguration.Cor
36f40 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
36f50 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
36f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
36f70 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69  ssemblyName desi
36f80 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
36f90 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
36fa0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
36fb0 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65  mblyName.GetAsse
36fc0 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  mblyName(..     
36fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fe0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
36ff0 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
37000 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
37010 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
37020 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
37030 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
37040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
37050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37080 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
37090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
370a0 65 67 69 6f 6e 20 53 79 73 74 65 6d 20 44 69 72  egion System Dir
370b0 65 63 74 6f 72 79 20 43 68 65 63 6b 0d 0a 20 20  ectory Check..  
370c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370d0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
370e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
370f0 45 3a 20 47 65 74 74 69 6e 67 20 74 68 65 20 73  E: Getting the s
37100 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20  ystem directory 
37110 76 61 6c 75 65 20 68 65 72 65 20 73 65 72 76 65  value here serve
37120 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
37130 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
37140 74 77 6f 20 70 75 72 70 6f 73 65 73 3a 0d 0a 20  two purposes:.. 
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37160 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
37170 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
37180 20 20 20 20 31 2e 20 49 74 20 65 6e 61 62 6c 65      1. It enable
37190 73 20 75 73 20 74 6f 20 6c 6f 67 20 74 68 65 20  s us to log the 
371a0 73 79 73 74 65 6d 20 64 69 72 65 63 74 6f 72 79  system directory
371b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
371c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
371d0 20 20 76 61 6c 75 65 20 76 65 72 79 20 65 61 72    value very ear
371e0 6c 79 20 69 6e 20 74 68 65 20 69 6e 73 74 61 6c  ly in the instal
371f0 6c 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 0d 0a  lation process..
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
37220 28 69 2e 65 2e 20 65 76 65 6e 20 74 68 6f 75 67  (i.e. even thoug
37230 68 20 74 68 65 20 76 61 6c 75 65 20 69 74 73 65  h the value itse
37240 6c 66 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  lf is not..     
37250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37260 2f 20 20 20 20 20 20 20 20 20 20 6e 65 65 64 65  /          neede
37270 64 20 75 6e 74 69 6c 20 6d 75 63 68 20 6c 61 74  d until much lat
37280 65 72 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  er)...          
37290 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
372a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372b0 20 20 2f 2f 20 20 20 20 20 20 20 32 2e 20 53 69    //       2. Si
372c0 6e 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 73  nce the value is
372d0 20 63 61 63 68 65 64 2c 20 69 74 20 70 72 65 76   cached, it prev
372e0 65 6e 74 73 20 61 6e 0d 0a 20 20 20 20 20 20 20  ents an..       
372f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37300 20 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69           excepti
37310 6f 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 74 68  on from being th
37320 72 6f 77 6e 20 6d 75 63 68 20 6c 61 74 65 72 20  rown much later 
37330 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  during..        
37340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
37350 20 20 20 20 20 20 20 20 74 68 65 20 69 6e 73 74          the inst
37360 61 6c 6c 20 77 68 65 6e 20 74 68 65 20 76 61 6c  all when the val
37370 75 65 20 69 73 20 71 75 65 72 69 65 64 20 61 67  ue is queried ag
37380 61 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ain..           
37390 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
373a0 20 20 20 20 20 28 69 2e 65 2e 20 77 69 74 68 20       (i.e. with 
373b0 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
373c0 6f 72 20 74 68 65 20 22 77 6f 77 36 34 22 0d 0a  or the "wow64"..
373d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
373f0 70 61 72 61 6d 65 74 65 72 29 2e 0d 0a 20 20 20  parameter)...   
37400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37410 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
37420 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
37430 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
37440 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
37450 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  diumLow,..      
37460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37470 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
37480 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
37490 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
374a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374b0 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 20          "System 
374c0 64 69 72 65 63 74 6f 72 79 20 69 73 20 7b 30 7d  directory is {0}
374d0 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  .", ForDisplay(.
374e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
374f0 20 20 20 20 20 20 20 20 20 47 65 74 53 79 73 74           GetSyst
37500 65 6d 44 69 72 65 63 74 6f 72 79 28 63 6f 6e 66  emDirectory(conf
37510 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 29  iguration.Wow64)
37520 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
37530 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
37540 63 65 43 61 74 65 67 6f 72 79 29 3b 20 2f 2a 20  ceCategory); /* 
37550 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
37570 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
375c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
375d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375e0 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
375f0 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75  Framework / Visu
37600 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a  al Studio Data..
37610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37620 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
37630 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  age = null;..   
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
37660 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
37670 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
37680 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
37690 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d   vsList = null;.
376a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
376b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
376c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
37700 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
37710 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 64 65  lizeVsPackage(de
37720 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
37730 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
37740 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
37750 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
37760 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
37770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37780 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47    InstallFlags.G
37790 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63  lobalAssemblyCac
377a0 68 65 2c 20 74 72 75 65 29 20 26 26 0d 0a 20 20  he, true) &&..  
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
377d0 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
377e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
37800 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67  llFlags.VsPackag
37810 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
37820 61 63 68 65 2c 20 74 72 75 65 29 2c 0d 0a 20 20  ache, true),..  
37830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37840 20 20 20 20 20 20 72 65 66 20 70 61 63 6b 61 67        ref packag
37850 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
37860 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
37870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
378b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
378c0 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
378d0 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61 74  kList(configurat
378e0 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a 20  ion.PerUser ?.. 
378f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37900 20 20 20 20 20 20 20 72 65 67 69 73 74 72 79 2e         registry.
37910 43 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72 65  CurrentUser : re
37920 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
37930 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ine,..          
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37950 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66  nfiguration, ref
37960 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b   frameworkList);
37970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37980 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
37990 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 75  zeVsList(configu
379a0 72 61 74 69 6f 6e 2e 50 65 72 55 73 65 72 20 3f  ration.PerUser ?
379b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
379c0 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74            regist
379d0 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 20 3a  ry.CurrentUser :
379e0 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
379f0 61 63 68 69 6e 65 2c 0d 0a 20 20 20 20 20 20 20  achine,..       
37a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a10 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
37a20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20  ref vsList);..  
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a40 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37ab0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
37ac0 68 61 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74  hared Client Dat
37ad0 61 20 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20  a Creation..    
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 6f 62 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79  object directory
37b00 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61  Data = new AnyPa
37b10 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
37b20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37b30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
37b40 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f  guration.Directo
37b50 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ry, configuratio
37b60 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20  n.Install);.... 
37b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b80 20 20 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61     object fileNa
37b90 6d 65 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79  meData = new Any
37ba0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
37bb0 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l>(..           
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
37bd0 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
37be0 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e  nerFileName, con
37bf0 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61  figuration.Insta
37c00 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
37c10 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
37c20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
37c30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
37c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c70 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
37c90 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20  region .NET GAC 
37ca0 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a  Install/Remove..
37cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cc0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
37cd0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
37ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
37d00 74 61 6c 6c 46 6c 61 67 73 2e 47 6c 6f 62 61 6c  tallFlags.Global
37d10 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74  AssemblyCache, t
37d20 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
37d30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d50 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75        Publish pu
37d60 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  blish = null;...
37d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
37d90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
37da0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dc0 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50   publish = new P
37dd0 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20  ublish();....   
37de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37df0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
37e00 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d  ration.Install).
37e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37e20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e40 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
37e50 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
37e60 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
37e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e80 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
37e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37eb0 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
37ec0 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
37ed0 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
37ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f00 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
37f10 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
37f20 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
37f50 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
37f60 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
37f70 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
37f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
37fa0 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
37fb0 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
37fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fe0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
37ff0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
38000 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
38010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38020 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
38030 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
38060 66 69 67 75 72 61 74 69 6f 6e 2e 49 73 4c 69 6e  figuration.IsLin
38070 71 53 75 70 70 6f 72 74 65 64 28 29 29 0d 0a 20  qSupported()).. 
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
380a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
380c0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
380d0 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
380e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
38100 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
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 20 20 20 70                 p
38130 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
38140 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
38150 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
38160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38180 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
38190 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
381a0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
381b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
381c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381d0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
381e0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
381f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
38200 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38220 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74 61         "GacInsta
38230 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ll: assemblyPath
38240 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
38250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
38270 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
38280 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
38290 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
382a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
382c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
382d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38300 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
38310 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
38320 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
38330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38340 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
38350 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67  llFlags.VsPackag
38360 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
38370 61 63 68 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  ache, true))..  
38380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38390 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
383a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
383c0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
383d0 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
383e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
38400 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
38430 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c  blish.GacInstall
38440 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44  (configuration.D
38450 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
38460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
38490 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
384a0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
384b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
384e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
384f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
38500 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
38510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38520 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
38530 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
38540 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38570 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
38580 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
38590 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
385a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
385d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
385e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
38600 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
38610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38620 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
38630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38660 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
38670 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
38680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386a0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
386b0 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c  .VsPackageGlobal
386c0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c 20 74  AssemblyCache, t
386d0 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
386e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38710 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
38720 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
38730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38750 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a        /* throw *
38760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
38790 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75  acRemove(configu
387a0 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46  ration.DesignerF
387b0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
387e0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
387f0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
38800 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
38810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38820 20 2