{\rtf1\ansi\deff3\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset0 Arial;}{\f5\froman\fprq2\fcharset0 StarSymbol{\*\falt Arial Unicode MS};}{\f6\froman\fprq2\fcharset0 Courier New;}{\f7\froman\fprq2\fcharset0 Tahoma;}{\f8\fnil\fprq2\fcharset0 Lucida Sans Unicode;}{\f9\fnil\fprq2\fcharset0 MS Mincho;}{\f10\fnil\fprq2\fcharset0 StarSymbol{\*\falt Arial Unicode MS};}{\f11\fnil\fprq2\fcharset0 Times New Roman;}{\f12\fnil\fprq2\fcharset0 Arial;}{\f13\fnil\fprq2\fcharset0 Courier New;}{\f14\fnil\fprq2\fcharset0 Tahoma;}{\f15\fswiss\fprq0\fcharset128 Arial;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\stylesheet{\s0\snext0\dbch\af8\langfe255\dbch\af11\afs24\alang2057\nowidctlpar\hyphpar0\ltrpar\cf0\loch\f0\fs24\lang2057\kerning1 Normal;}
{\s1\sbasedon59\snext1\dbch\af9\langfe255\dbch\af12\afs32\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs32\lang2057\b Heading 1;}
{\s2\sbasedon59\snext2\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\i\b Heading 2;}
{\s3\sbasedon59\snext3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b Heading 3;}
{\s4\sbasedon59\snext4\dbch\af9\langfe255\dbch\af12\afs24\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs24\lang2057\i\b Heading 4;}
{\*\cs15\snext15\dbch\af10\langfe255\dbch\af10\afs18\alang2057\cf0\loch\f5\fs18\lang2057 RTF_Num 2 3;}
{\*\cs16\snext16\dbch\af10\langfe255\dbch\af10\afs18\alang2057\cf0\loch\f5\fs18\lang2057 RTF_Num 2 6;}
{\*\cs17\snext17\dbch\af10\langfe255\dbch\af10\afs18\alang2057\cf0\loch\f5\fs18\lang2057 RTF_Num 2 9;}
{\*\cs18\snext18\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num3z2;}
{\*\cs19\snext19\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num4z2;}
{\*\cs20\snext20\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num6z2;}
{\*\cs21\snext21\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num7z2;}
{\*\cs22\snext22\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num8z2;}
{\*\cs23\snext23\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num9z2;}
{\*\cs24\snext24\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 Absatz-Standardschriftart;}
{\*\cs25\snext25\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart;}
{\*\cs26\snext26\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1;}
{\*\cs27\snext27\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11;}
{\*\cs28\snext28\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111;}
{\*\cs29\snext29\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111;}
{\*\cs30\snext30\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111;}
{\*\cs31\snext31\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111;}
{\*\cs32\snext32\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111;}
{\*\cs33\snext33\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111;}
{\*\cs34\snext34\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num2z2;}
{\*\cs35\snext35\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111;}
{\*\cs36\snext36\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111;}
{\*\cs37\snext37\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num5z2;}
{\*\cs38\snext38\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111111;}
{\*\cs39\snext39\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111111;}
{\*\cs40\snext40\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111111;}
{\*\cs41\snext41\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111111111;}
{\*\cs42\snext42\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111111111;}
{\*\cs43\snext43\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111111111;}
{\*\cs44\snext44\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111111111111;}
{\*\cs45\snext45\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111111111111;}
{\*\cs46\snext46\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num12z2;}
{\*\cs47\snext47\dbch\af8\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 WW8Num13z2;}
{\*\cs48\snext48\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111111111111;}
{\*\cs49\snext49\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111111111111111;}
{\*\cs50\snext50\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111111111111111;}
{\*\cs51\snext51\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111111111111111;}
{\*\cs52\snext52\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart11111111111111111111111;}
{\*\cs53\snext53\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart111111111111111111111111;}
{\*\cs54\snext54\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 WW-Absatz-Standardschriftart1111111111111111111111111;}
{\*\cs55\snext55\dbch\af8\langfe255\afs24\alang2057\fs24\lang2057 Numbering Symbols;}
{\*\cs56\snext56\dbch\af10\langfe255\dbch\af10\afs18\alang2057\loch\f5\fs18\lang2057 Bullets;}
{\*\cs57\snext57\dbch\af11\langfe255\dbch\af11\afs24\alang255\cf9\loch\f0\fs24\lang255\ul\ulc0 Hyperlink;}
{\*\cs58\snext58\langfe255\alang255\cf9\lang255\ul\ulc0 Hyperlink;}
{\s59\sbasedon0\snext60\dbch\af9\langfe255\dbch\af12\afs28\alang2057\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057 Heading;}
{\s60\sbasedon0\snext60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057 Text Body;}
{\s61\sbasedon60\snext61\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057 List;}
{\s62\sbasedon0\snext62\dbch\af8\langfe255\dbch\af15\afs24\alang2057\ai\sb120\sa120\noline\cf0\loch\f0\fs24\lang2057\i Caption;}
{\s63\sbasedon0\snext63\dbch\af8\langfe255\dbch\af11\afs24\alang2057\cf0\loch\f0\fs24\lang2057 Index;}
{\s64\sbasedon0\snext64\dbch\af8\langfe255\dbch\af11\afs24\alang2057\ai\sb120\sa120\cf0\loch\f0\fs24\lang2057\i caption;}
{\s65\sbasedon0\snext65\dbch\af8\langfe255\dbch\af11\afs24\alang2057\cf0\loch\f0\fs24\lang2057 Table Contents;}
{\s66\sbasedon65\snext66\dbch\af8\langfe255\dbch\af11\afs24\alang2057\ab\qc\cf0\loch\f0\fs24\lang2057\b Table Heading;}
{\s67\sbasedon0\snext67\dbch\af8\langfe255\dbch\af11\afs24\alang2057\cf0\loch\f0\fs24\lang2057 Header and Footer;}
{\s68\sbasedon0\snext68\dbch\af8\langfe255\dbch\af11\afs24\alang2057\tqc\tx4818\tqr\tx9637\cf0\loch\f0\fs24\lang2057 Footer;}
}{\*\listtable{\list\listtemplateid1
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid1}
{\list\listtemplateid2
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid2}
{\list\listtemplateid3
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid3}
{\list\listtemplateid4
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid4}
{\list\listtemplateid5
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid5}
{\list\listtemplateid6
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li360}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li720}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li1080}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li1440}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li1800}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li2160}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61548 ?;}{\levelnumbers;}\f16\fi-360\li2520}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u61569 ?;}{\levelnumbers;}\f17\fi-360\li2880}
{\listlevel\levelnfc23\leveljc0\levelstartat1\levelfollow0{\leveltext \'01\u9632 ?;}{\levelnumbers;}\f18\fi-360\li3240}\listid6}
{\list\listtemplateid7
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}
{\listlevel\levelnfc255\leveljc0\levelstartat1\levelfollow2{\leveltext \'00;}{\levelnumbers;}\fi0\li0}\listid7}
}{\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}}{\*\generator LibreOffice/7.0.0.3$Windows_X86_64 LibreOffice_project/8061b3e9204bef6b321a21033174034a5e2ea88e}{\info{\creatim\yr2007\mo7\dy24\hr19\min43}{\revtim\yr2020\mo10\dy3\hr21\min16}{\printim\yr2112\mo12\dy31\hr23\min0}}{\*\userprops}\deftab709
\hyphauto1\viewscale130
{\*\pgdsctbl
{\pgdsc0\pgdscuse451\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1649\footery1134{\footer\pard\plain \s0\dbch\af8\langfe255\dbch\af11\afs24\alang2057\nowidctlpar\hyphpar0\ltrpar\cf0\loch\f0\fs24\lang2057\kerning1\qc\ltrpar{\rtlch\dbch\af8\langfe255\dbch\af12\afs20\alang2057\hich\af4 \ltrch\cf0\fs20\lang2057\i0\b0\loch\f4\loch
Use subject to our }{{\field{\*\fldinst HYPERLINK "https://www.gsys.biz/copyright/#copyright" }{\fldrslt {\rtlch\dbch\af8\langfe255\dbch\af11\afs20\alang255 \ltrch\loch\f0\langfe255\alang255\cf9\lang255\ul\ulc0\cf9\fs20\lang255\i0\ul\ulc0\b0\loch
Terms and Conditions}{}}}\rtlch\dbch\af8\langfe255\dbch\af12\afs20\alang2057\hich\af4 \ltrch\cf0\fs20\lang2057\i0\b0\loch\f4\loch
\tab \tab \tab \tab \tab \tab \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20Written By }{{\field{\*\fldinst HYPERLINK "http://www.gsys.biz/homepages/rfruen/" }{\fldrslt {\rtlch\dbch\af8\langfe255\dbch\af11\afs20\alang255 \ltrch\dbch\af11\langfe255\dbch\af11\afs24\alang255\cf9\loch\f0\fs24\lang255\ul\ulc0\cf9\fs20\lang255\i0\ul\ulc0\b0\loch
Ross Fruen}}}}
\par }\pgdscnxt0 Default Page Style;}}
\formshade{\*\pgdscno0}\paperh16838\paperw11906\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\pgndec\sftnnar\saftnnrlc\sectunlocked1\pgwsxn11906\pghsxn16838\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1649\footery1134{\footer\pard\plain \s0\dbch\af8\langfe255\dbch\af11\afs24\alang2057\nowidctlpar\hyphpar0\ltrpar\cf0\loch\f0\fs24\lang2057\kerning1\qc\ltrpar{\rtlch\dbch\af8\langfe255\dbch\af12\afs20\alang2057\hich\af4 \ltrch\cf0\fs20\lang2057\i0\b0\loch\f4\loch
Use subject to our }{{\field{\*\fldinst HYPERLINK "https://www.gsys.biz/copyright/#copyright" }{\fldrslt {\rtlch\dbch\af8\langfe255\dbch\af11\afs20\alang255 \ltrch\loch\f0\langfe255\alang255\cf9\lang255\ul\ulc0\cf9\fs20\lang255\i0\ul\ulc0\b0\loch
Terms and Conditions}{}}}\rtlch\dbch\af8\langfe255\dbch\af12\afs20\alang2057\hich\af4 \ltrch\cf0\fs20\lang2057\i0\b0\loch\f4\loch
\tab \tab \tab \tab \tab \tab \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20 \u8198\'20Written By }{{\field{\*\fldinst HYPERLINK "http://www.gsys.biz/homepages/rfruen/" }{\fldrslt {\rtlch\dbch\af8\langfe255\dbch\af11\afs20\alang255 \ltrch\dbch\af11\langfe255\dbch\af11\afs24\alang255\cf9\loch\f0\fs24\lang255\ul\ulc0\cf9\fs20\lang255\i0\ul\ulc0\b0\loch
Ross Fruen}}}}
\par }\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
{\*\ftnsep\chftnsep}\pgndec\pard\plain \s1\dbch\af9\langfe255\dbch\af12\afs32\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs32\lang2057\b\ql\tx0\sb240\sa120\ltrpar{\rtlch \ltrch\i0\loch
Installing and Configuring Applications}
\par \pard\plain \s2\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\i\b\ql\tx0\ltrpar{\loch
Lesson 1: Configuration Settings}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
It is best to avoid hard coding variables. .NET provides ample tool set to avoid hard coding.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Prior to .NET 2.0 developers had 2 ways to handle configuration. First approach was to put everything in the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
appSettings}{\rtlch \ltrch\i0\b0\loch
of the configuration file. Simple, but had to deal with settings in non-object oriented way. Other way was to define custom configuration settings sections in configuration file and build corresponding classes to consume these sections. Complex, but object oriented.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
.NET 2.0 provides tools to adopt the latter approach, but without having to write reams of code.}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Configuration in .NET Framework 2.0}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
System.Configuration}{\rtlch \ltrch\i0\b0\loch
contains all classes needed to manage configuration.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Top of logical hierarchy are the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration}{\rtlch \ltrch\i0\b0\loch
and }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationManager}{\rtlch \ltrch\i0\b0\loch
classes. Neither class has a constructor specified. Both classes have identical properties (}{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
AppSettings}{\rtlch \ltrch\i0\b0\loch
and }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConnectionSettings}{\rtlch \ltrch\i0\b0\loch
). Each of the properties of the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationManager}{\rtlch \ltrch\i0\b0\loch
returns a }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration}{\rtlch \ltrch\i0\b0\loch
object. To retrieve configuration settings follow these steps:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\tx1080\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
1.\tab }{\rtlch \ltrch\i0\b0\loch
Declare }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration}{\rtlch \ltrch\i0\b0\loch
object}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
2.\tab }{\rtlch \ltrch\i0\b0\loch
Use the various methods in the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationManager}{\rtlch \ltrch\i0\b0\loch
with the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Open}{\rtlch \ltrch\i0\b0\loch
prefix to open application or machine configuration file.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
configuration cs = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
configuration cs = ConfigurationManager.OpenMachineConfiguration();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ExeConfigurationFileMap myMap = new ExeConfigurationFileMap();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
myMap.ExeConfigFilename = @\u8221\'94Demo.exe.config\u8221\'94;}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration cs = ConfigurationManager.OpenMappedExeConfiguration(myMap, ConfigurationUserLevel.None);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
The }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationUserLevel}{\rtlch \ltrch\i0\b0\loch
enumeration contains the following values:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls1 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
None \u8211\'96 Gets Configuration object that applies to all users}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
PerUserRoaming \u8211\'96 Gets Configuration object that applies to the current user}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
PerUserRoamingAndLocal - Gets Configuration object that applies to the current user}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
The runtime will not stop the ExeConfigFilename being set to a non-existent file. Values returned in this situation will be null. To avoid verify the file exists before use.}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Common Settings}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Refers to areas that determine how application runs, e.g. Configuring to run under specific version of .NET framework. To specify that 1.1 should be used add following to file:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Rules for runtime versioning:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
If version application is built with is present, that version will be used}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
If\u8198\'20 \u8198\'20 version application is built with is not present and nothing specified by }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
supportedRuntime}{\rtlch \ltrch\i0\b0\loch
then the latest version of framework on machine is used.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To verify that shared assembly works with multiple assemblies it can be a pain installing / uninstalling the assembly from the GAC multiple times. Can alleviate by setting the environment variable DEVPTAH to point to the location of the assembly and setting the developmentMode to true:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Can specify where to find specific version of assembly. Can use .NET Framework 2.0 configuration tool or by manually editing the machine configuration file. The codeBase element allows specification of version and location information, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Two primary sections, connectionStrings and appSettings,\u8198\'20 \u8198\'20 support common configuration requirements, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Previously accessed appSetting entries via ConfigurationSettings, but this has been obsoleted, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
string barVar = ConfigurationSettings.AppSettings[\u8220\'93Foo\u8221\'94];}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Correct way to access is via ConfigurationManager, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
string barVar = ConfigurationManager.AppSettings[\u8220\'93Foo\u8221\'94];}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Can enumerate AppSettings, as follows:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
NameValueCollection coll = ConfigurationManager.AppSettings;}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IEnumerator enum = coll.Keys.GetEnumerator();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Connection settings are slightly more involved, but still intuitive. Previously .NET made no real distinction between connection strings and others. Now strong typing is supported allowing provider type to be supported. Access almost identically to AppSettings, primary difference instead of using NameValueCollection is use of ConnectionStringSettingsCollection as exposed by ConnectionStrings property, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConnectionStringSettings conn = ConfigurationManager.ConnectionStrings[\u8220\'93WorksString\u8221\'94];}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Web applications should use the WebConfigurationManager instead of the ConfigurationManager.}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Application Settings}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Apply to application as a whole rather than a specific user, typical candidates are database connection strings, web service urls, remoting settings, etc.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Can construct by hand, but discouraged because configuration files demand extreme precision. Other options is to use }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Settings}{\rtlch \ltrch\i0\b0\loch
class and the designer. To use designer add new project item of type }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Settings File}{\rtlch \ltrch\i0\b0\loch
. The IDE presents designer allowing creation and management of settings. Generates appropriate class to provide access to the settings, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
SampleSettings mySettings = new SampleSettings();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Debug.WriteLine(mySettings.WebServiceUrl);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Last mechanism is }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ApplicationSettingsBase}{\rtlch \ltrch\i0\b0\loch
\u8211\'96 as used by Visual Studio. To use create class that derives from }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ApplicationSettingsBase}{\rtlch \ltrch\i0\b0\loch
and decorate each property with either UserScopedSettings or ApplicationScopedSettings attribute, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
class AppSettingsHelper : ApplicationSettingsBase}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\{}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab [UserScopedSetting()]}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab public String Key}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \{}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab get \{ return (this[\u8220\'93Key\u8221\'94] as String); \}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab set \{ this[\u8220\'93Key\u8221\'94] = value; \}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\}}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Remoting Settings}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Provides ability to add assemblies or change their location without requiring recompilation of application. For example...}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
3-tier application with all layers running on same machine. By using remoting can spread out load between machines. If components have been registered in code then recompilation will be required to point to the new assembly locations. By using configuration files the assemblies can be deployed to new machines and used when the configuration file is updated \u8211\'96 with no need to restart the application.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To register a component as a server need to specify fully qualified object name and assembly, the type (Singleton or Single Call) and Uniform Resource Identifier. If being used on IIS then the URI must have a .rem extension:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
For a client to consume the assembly similar entries are made, except the mode is not required and the URI points to the location where the object is being made available, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s2\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\i\b\ql\tx0\ltrpar{\loch
Lesson 2: Creating an Installer}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
In some circumstances it is necessary to add custom functionality to the features provided by the Microsoft Windows Installer. These custom installers should derive from the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Installer}{\rtlch \ltrch\i0\b0\loch
class.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Main reason for using installers:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls2 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
professional look and feel}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
simplify what user has to do in order to use application}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
specify settings application needs to execute}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
provide mechanism to remove application without unwanted remnants}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
To create and use an }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Installer}{\rtlch \ltrch\i0\b0\loch
derived class:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\tx1080\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
1.\tab }{\rtlch \ltrch\i0\b0\loch
Derive class from Installer}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
2.\tab }{\rtlch \ltrch\i0\b0\loch
Override Install, Commit, Rollback and Uninstall methods}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
3.\tab }{\rtlch \ltrch\i0\b0\loch
Add RunInstallerAttribute to derived class and set runInstaller parameter to true.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
4.\tab }{\rtlch \ltrch\i0\b0\loch
Put derived class in assembly with your application to install}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af14\hich\af7 \ltrch\i0\b0\loch\f7\loch
5.\tab }{\rtlch \ltrch\i0\b0\loch
Invoke the installer, e.g. Use the InstallerTool or AssemblyInstaller or ComponentInstaller class programmatically. The }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Installer}{\rtlch \ltrch\i0\b0\loch
class has an }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Installers}{\rtlch \ltrch\i0\b0\loch
property which returns an instance of the InstallerCollection}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
To start installation call the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Install}{\rtlch \ltrch\i0\b0\loch
method. If no errors are found then }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Commit}{\rtlch \ltrch\i0\b0\loch
is called at the end of the installation. }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To launch an installer progammatically use either the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
AssemblyInstaller}{\rtlch \ltrch\i0\b0\loch
or }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ComponentInstaller}{\rtlch \ltrch\i0\b0\loch
.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IDictionary actions = new Hashtable();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
AssemblyInstaller customAssemblyInstaller = new AssemblyInstaller(\u8220\'93CustomInstaller.dll\u8221\'94, args);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.UseNewContext = true;}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.Install(actions);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.Commit(actions);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To uninstall:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IDictionary actions = new Hashtable();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
AssemblyInstaller customAssemblyInstaller = new AssemblyInstaller(\u8220\'93CustomInstaller.dll\u8221\'94, args);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.UseNewContext = true;}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.Uninstall(actions);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
customAssemblyInstaller.Commit(actions);}
\par \pard\plain \s2\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\i\b\ql\tx0\ltrpar{\loch
Lesson 3: Configuring .Net Framework 2.0}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Access tool via Administrative Tools or the SDK command prompt. Available options}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls3 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Manage assembly cache}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61569\'3f\tab}\ilvl1\ls3 \li2520\ri0\lin2520\rin0\fi-360\ql\tx3240\li1800\ri0\lin1800\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
View list of assemblies in GAC}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Add assembly to GAC}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls3 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Manage configured assemblies}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61569\'3f\tab}\ilvl1\ls3 \li2520\ri0\lin2520\rin0\fi-360\ql\tx3240\li1800\ri0\lin1800\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
View list of configured assemblies}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Configure assembly}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u9632\'3f\tab}\ilvl2\ls3 \li3600\ri0\lin3600\rin0\fi-360\ql\tx4320\li2520\ri0\lin2520\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Dialogue provides two tabs. One controls binding policy, typically used to configure binding redirections that are used when switching from one release to another. Second tab allows the specification of code bases and reversion to earlier code bases.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls3 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Configure code access security policy}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61569\'3f\tab}\ilvl1\ls3 \li2520\ri0\lin2520\rin0\fi-360\ql\tx3240\li1800\ri0\lin1800\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Provides access to multiple nodes, specifically Enterprise, Machine and User. Each node has associated Code Groups, Permission Sets and Policy Assemblies. For these it is possible to manipulate membership conditions and permissions sets, e.g. the zone can be changed from Local Internet to My Computer.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls3 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
Adjust remoting services}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Manage individual applications}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Resetting a configuration}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Multiple things that can be reset in a configuration, most common being security settings. Easiest way to do this is select the \u8220\'93Runtime Security Policy\u8221\'94 node and choose \u8220\'93Reset All Policy Levels\u8221\'94.}
\par \pard\plain \s2\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ai\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\i\b\ql\tx0\ltrpar{\loch
Lesson 4: Configuration Management}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Getting and Storing Settings}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationManager}{\rtlch \ltrch\i0\b0\loch
= primary vehicle through which configuration settings retrieved. Using the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
appSettings}{\rtlch \ltrch\i0\b0\loch
section of the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationManager}{\rtlch \ltrch\i0\b0\loch
provides access to every value in the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
appSettings}{\rtlch \ltrch\i0\b0\loch
section of the configuration file.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Can use the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConnectionStrings}{\rtlch \ltrch\i0\b0\loch
property (as discussed earlier).}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Another possibility is through the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
GetSection}{\rtlch \ltrch\i0\b0\loch
method. In the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
configSections}{\rtlch \ltrch\i0\b0\loch
portion of the configuration file specify the name of the section, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Then specify the group and section, e.g.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab 11}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab \tab System.Data.SqlClient}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
Can have as many section groups and sections as want. To retrieve...}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ValuesHandler vals = ConfigurationManager.GetSection(\u8220\'93MyFirstSectionGroup/MyFirstSection\u8221\'94) as ValuesHandler;}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
To save call the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Save}{\rtlch \ltrch\i0\b0\loch
or }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
SaveAs}{\rtlch \ltrch\i0\b0\loch
method of the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration}{\rtlch \ltrch\i0\b0\loch
object.}
\par \pard\plain \s3\dbch\af9\langfe255\dbch\af12\afs28\alang2057\ab\sb240\sa120\keepn\cf0\loch\f4\fs28\lang2057\b\ql\tx0\ltrpar{\rtlch \ltrch\i0\loch
Implementing Configuration Interfaces}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
System.Configuration}{\rtlch \ltrch\i0\b0\loch
class has multiple interfaces that can be implemented to achieve precise functionality. Some, like }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IConfigurationSectionHandler}{\rtlch \ltrch\i0\b0\loch
are for general purpose use, others like }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ISettingsProviderService}{\rtlch \ltrch\i0\b0\loch
are more specific (e.g. providing design time support components).}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
The }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IConfigurationSectionHandler}{\rtlch \ltrch\i0\b0\loch
provides a high degree of granularity when accessing configuration information. It has been depreciated in .Net 2.0 and use should now be made of the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
class.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To create a }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
named Chapter9Section add the following declaration:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
The first portion of the type section takes a fully qualified object name (namespace.objectname) a comma and then the Assembly name (in this example the assembly name is App_Code).}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
In this example the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
will be implemented with two elements, note only one }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
will be used although multiple ones can be. When a }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
is used it is asses to the }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSectionCollection}{\rtlch \ltrch\i0\b0\loch
and can be retrieved by name or index. A }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
can be as complex as required}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Can use }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ConfigurationSection}{\rtlch \ltrch\i0\b0\loch
as a base for class to access these values:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
public class ConfigHandler : ConfigurationSection}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
\{}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab [ConfigurationProperty(\u8220\'93LastName\u8221\'94, IsRequired=false, DefaultValue = \u8220\'93NotGiven\u8221\'94)]}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab public string LastName}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \{}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab get \{ return (string) base[\u8220\'93LastName\u8221\'94];\}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab set \{ base[\u8220\'93LastName\u8221\'94] = value;\}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab [ConfigurationProperty(\u8220\'93FirstName\u8221\'94, IsRequired=false, DefaultValue = \u8220\'93NotGiven\u8221\'94)]}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab public string FirstName}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \{}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab get \{ return (string) base[\u8220\'93FirstName\u8221\'94];\}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \tab set \{ base[\u8220\'93FirstName\u8221\'94] = value;\}\tab \tab }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\tab \}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
\}}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
To use}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\li709\ri0\lin709\rin0\fi0\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Configuration Chapter9Config = WebConfiguration.OpenWebConfiguration(Request.ApplicationPath);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Chapter9.Configuration.ConfigHandler Chapter9Section = (Chapter9.Configuration.ConfigHandler) Chapter9Config.GetSection(\u8220\'93Chapter9Section\u8221\'94);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
Response.Write(Chapter9Section.FirstName);}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
// Clear config sections from config object}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
Chapter9Config.Sections.Clear(); }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
// Add new section}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
Chapter9Config.Sections.Add(\u8220\'93Chapter9Section\u8221\'94, Chapter9Section); }
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\hich\af6 \ltrch\i0\b0\loch\f6\loch
Chapter9Config.Save();}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar\loch
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
The }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
IApplicationSettingsProvider}{\rtlch \ltrch\i0\b0\loch
is useful, supporting 3 methods:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls4 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
GetPreviousVersion}{\rtlch \ltrch\i0\b0\loch
\u8211\'96 value of specified settings property for previous version of same application}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Reset}{\rtlch \ltrch\i0\b0\loch
\u8211\'96 returns application settings to their default values}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
Upgrade}{\rtlch \ltrch\i0\b0\loch
\u8211\'96 indicates to provider that the application has been upgraded, offering the provider the opportunity to upgrade its stored settings.}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
Provides support for:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls5 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
side-by-side execution of different versions of same application}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
retaining application settings when upgrading}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
resetting application settings to default value for currently used version}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
This functionality is implemented by }{\rtlch\dbch\af13\hich\af6 \ltrch\i0\b0\loch\f6\loch
ApplicationSettingsBase}{\rtlch \ltrch\i0\b0\loch
and so is easily available for use (if required). In addition this class provides:}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057{\listtext\pard\plain \u61548\'3f\tab}\ilvl0\ls6 \li1440\ri0\lin1440\rin0\fi-360\ql\tx2160\li1080\ri0\lin1080\rin0\fi-360\ltrpar{\rtlch \ltrch\i0\b0\loch
each property can be scoped at either application or user level}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\ltrpar{\rtlch \ltrch\i0\b0\loch
values scoped at user level stored differently to those at application level}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
application scoped values are stored in file .config that is stored in a Windows Special Folder accessed via the Application class through Application.LocalUserAppDataPath}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ltrpar{\rtlch \ltrch\i0\b0\loch
access provided through LocalFileSettingsProvider}
\par \pard\plain \s60\dbch\af8\langfe255\dbch\af11\afs24\alang2057\sb0\sa120\cf0\loch\f0\fs24\lang2057\ql\sb0\sa120\ltrpar{\rtlch \ltrch\i0\b0\loch
IConfigurationSectionHandler objects provide the ability to strongly type data. The value can be checked by the object before passing on to the client. This is not just restricted to type checking but can extend to value validation (e.g. the value is a valid US telephone number).}
\par }