<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ntils lab</title>
    <link>https://whistle.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 11:03:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>ntils</managingEditor>
    <image>
      <title>Ntils lab</title>
      <url>https://tistory1.daumcdn.net/tistory/29469/attach/64432efb62aa461a9b537c5065c2d209</url>
      <link>https://whistle.tistory.com</link>
    </image>
    <item>
      <title>Windows Phone 7 에서의 IsolatedStorageSettings 활용</title>
      <link>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C%EC%9D%98-IsolatedStorageSettings-%ED%99%9C%EC%9A%A9</link>
      <description>안녕하세요.&lt;br /&gt;
오늘은 격리된 저장소에 앱관련 설정파일을 생성하고 활용하는 방벙에 대해서 알아 보도록 하겠습니다.&lt;br /&gt;
격리된 저장소는 WP7에서 앱관련 파일들의 샌드박스내에서 저장하고 읽을 수 있는 앱을 위한 저장공간인데요.&lt;br /&gt;
아래와 같은 구조로 이루어져 있습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/123A3E334CD78D256F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F123A3E334CD78D256F&quot; width=&quot;480&quot; height=&quot;342&quot; alt=&quot;&quot; filename=&quot;Ff402541.7da2ecf9-d94a-41fa-aba0-226e9c535dae(en-us,VS.92).gif&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
파일/폴더를 저장할 수 있을 뿐더러, 어플리케이션의 설정을 보관하는 Local Settings 라는 것이 존재합니다.&lt;br /&gt;
이 것을 이용하여 격리된 저장소의 관리할 수 있을 뿐만 아니라, 어플리케이션에서 사용하는 설정값들을 저장하고 불러올 수 있는 기능을 제공합니다.&lt;br /&gt;
&lt;br /&gt;
이제부터는 격리된 저장소에 존재하는 Local Settings 를 활용하는 방법에 대해서 알아보도록 하겠습니다.&lt;br /&gt;
사용자 이름이나, 외부와의 통신을 위한 계정이나 주소등을 어플리케이션이 시작될때 마다 사용자에게 직접 입력받아야 한다면, 사용자로썬 불편해서 사용하질 못하겠죠?&lt;br /&gt;
이런 부분들은 격리된 저장소에 따로 파일로 저장하여 사용해도 되지만, System.IO.IsolatedStorage.IsolatedStorageSettings 클래스를 이용하면 아주 쉽게 관리하실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;설정값 저장하기 (기본활용)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
우선은 간단한 설정 값을 저장하는 방법에 대해서 알아보도록 하겠습니다.&lt;br /&gt;
IsolatedStorageSettings 클래스에 보면 정적 속성으로 ApplicationSettings 속성이 존재합니다.&lt;br /&gt;
이 ApplicationSettings 속성을 이용하여 우리가 저장하고자 하는 설정값을 Key/Value 쌍으로 저장이 가능합니다.&lt;br /&gt;
&lt;br /&gt;
새로운 설정값을 추가하고자 한다면&lt;br /&gt;
IsolatedStorageSettings.ApplicationSettings.Add(&quot;키&quot;, 값); 와 같이 추가해주면 되는 것입니다.&lt;br /&gt;
&lt;br /&gt;
사용자 이름을 추가하는 경우라면&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Add(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;userName&quot;&lt;/span&gt;, &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hong, Gildong&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

와 같이 사용 하면 되는 것이죠.&lt;br /&gt;
&lt;br /&gt;
Add메서드는 시그니쳐는 아래와 같습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/114747124CD791B81D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F114747124CD791B81D&quot; width=&quot;333&quot; height=&quot;95&quot; alt=&quot;&quot; filename=&quot;2010-11-08 오후 2-59-06.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
Add메서드의 시그니쳐를 잘 보면 key는 string 형식이며, value는 object 형식을 받고 있음을 알 수 있습니다.&lt;br /&gt;
Value에 해당하는 설정 값이 꼭 문자열일 필요가 없으며, &lt;span style=&quot;text-decoration: underline;&quot;&gt;int, DateTime 등의 기본형식외에도 우리가 직접 생성한 클래스의 객체들도 들어 갈 수 있다&lt;/span&gt;는 것입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; Name { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; UserID { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; Password { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
와 같은 클래스가 존재한다고 했을때, 이 클래스에 생성된 객체를 아래처럼 설정값으로 저장할 수도 있다는 의미죠.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; { Name = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hong, Gildong&quot;&lt;/span&gt;, UserID = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hong&quot;&lt;/span&gt;, Password = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Gildong1!&quot;&lt;/span&gt; };&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Add(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;, user);&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
클래스의 인스턴스를 저장할 수 있으므로, 하나의 키에 여러가지 정보를 저장하고 가져올 수 있게 되는 것입니다.&lt;br /&gt;
&lt;br /&gt;
그렇다면, 이미 추가되어 있는 키를 새로 추가하고자 한다면 키가 중복되므로 예외가 발생하겠죠.&lt;br /&gt;
기존에 존재하는 키에 대해서 값을 변경할 때는 아래와 같이 ApplicationSettings[] 인덱서를 이용하여 직접 값을 할당 하면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;] = user;&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
그리고, 설정이 추가되거나 변경되었을때는 꼭 Save 메서드를 호출 하여 변경분을 Local Settings에 저장하여야 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Save();&lt;/div&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
기본적인 저장코드를 전체를 본다면 아래와 같이 되겠죠.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; { Name = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hong, Gildong&quot;&lt;/span&gt;, UserID = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hong&quot;&lt;/span&gt;, Password = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Gildong1!&quot;&lt;/span&gt; };&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Contains(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;] = user;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Add(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;, user);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Save();&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
ApplicationSettings의 Contains 메서드를 이용하여 현재 설정파일에 user 라는 키값이 존재하는지 확인한후 추가하거나 변경하고, 저장하는 형태를 가지게 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;설정값 불러오기&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
설정을 저장하였다면, 값을 불러와야겠죠?&lt;br /&gt;
값을 불러 올때는 아래와 같이 사용해도 됩니다.&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user = &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;] &lt;span style=&quot;color: blue;&quot;&gt;as&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user = (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt;)&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;];&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
ApplicationSettings 컬렉션은 값을 object 형식으로 가지기 때문에 등록했던 형식으로의 캐스팅이 필요하므로,&lt;br /&gt;
두 방법 모두 object 형식을 등록하였던 형식으로 캐스팅을 하고 있습니다.&lt;br /&gt;
&lt;br /&gt;
하지만, 위 방법을 이용하실 때 만일 설정파일에 지정한 키값(user)가 존재하지 않는다면, 예외가 발생합니다.&lt;br /&gt;
설정 키값이 존재하는지에 관계없이 설정 값을 가져오는 방법으로 TryGetValue&amp;lt;T&amp;gt;(string key, out object value) 제네릭 메서드가 있습니다.&lt;br /&gt;
시그니쳐를 보면&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/204CD30D4CD7997271&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F204CD30D4CD7997271&quot; width=&quot;426&quot; height=&quot;87&quot; alt=&quot;&quot; filename=&quot;2010-11-08 오후 3-33-15.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
T 는 저장한 값의 형식(여기서는 User 클래스 형식)이며, 설정값을 가져오는데 성공했는지 여부를 bool 형식으로 반환합니다.&lt;br /&gt;
그리고, value 는 out 파라미터를 이용합니다. 그러므로 호출시 out 키워드를 꼭 붙어야 합니다.&lt;br /&gt;
&lt;br /&gt;
값을 가져오는 기본적인 코드를 보자면 아래와 같이 될 겁니다.&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.TryGetValue&amp;lt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt;&amp;gt;(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;, &lt;span style=&quot;color: blue;&quot;&gt;out&lt;/span&gt; user);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (user != &lt;span style=&quot;color: blue;&quot;&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: green;&quot;&gt;// Do something&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;br /&gt;
물론 TryGetValue 메서드는 지정한 키값을 가져오는데 성공했는지 여부를 반환하므로 아래와 같이 사용해도 됩니다.&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt; user;&lt;/p&gt;

&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.TryGetValue&amp;lt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;User&lt;/span&gt;&amp;gt;(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;user&quot;&lt;/span&gt;, &lt;span style=&quot;color: blue;&quot;&gt;out&lt;/span&gt; user))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: green;&quot;&gt;// Do something&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
여기 까지만 한다면, 간단한 설정값을 저장하고 불러오는데는 아무런 문제가 없을 것입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;설정값 저장하기 (고급활용)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
그렇다면, 아래와 같은 클래스를 설정파일로 저장한다고 생각해보죠. &lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Comics&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; FileName { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; LocalPath { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DateTime&lt;/span&gt; Created { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;long&lt;/span&gt; FileSize { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; ThumnailPath { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;BitmapImage&lt;/span&gt; Thumnail { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Comics&lt;/span&gt;&amp;gt; comicsList = GetCurrentComics();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Contains(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;] = comicsList;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Add(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;, comicsList);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Save();&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
위와 같이 하나의 객체만 설정파일에 저장할 수 있는것이 아닌 배열이나, List&amp;lt;T&amp;gt;와 같은 집합형태의 객체도 충분이 설정파일에 저장이 가능합니다.&lt;br /&gt;
다수의 리스트를 어플리케이션 설정에 저장해야 할 경우에는 위와 같은 방식을 이용하시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
하지만, 위의 Comics 클래스는 다소 억지스러운 면이 있는 클래스입니다. 뭔가 위화감이 느껴지시나요?&lt;br /&gt;
만일, comicsList가 10개의 항목을 가지고 있고, Thumnail 속성의 BitmapImage 객체가 평균적으로 1MB의 크기를 가진다고 가정했을 때, 설정파일의 크기가 최소 크기가 10MB나 될 겁니다.&lt;br /&gt;
이렇게 되면 배보다 배꼽이 더 큰 형상이 되겠죠?&lt;br /&gt;
&lt;br /&gt;
앞에서 IsolatedStorageSettings 항목은 값으로 object 형식을 가진다고 하였습니다.&lt;br /&gt;
그리고, 이 항목은 XML 형식으로 격리된 저장소에 저장되게되죠. XML은 문자열로 이뤄짐을 모두 잘 알고 계실것입니다. &lt;br /&gt;
그렇다면 어떻게 객체가 어떻게 문자열로 저장이 될까요?&lt;br /&gt;
바로 객체를 직렬화하여 문자열로 변경하여 저장하게 되는 것입니다.&lt;br /&gt;
&lt;br /&gt;
.NET 3.5 이상에서는 직렬화를 위하여 DataContractAttribute 특성과 DataMemberAttribute 특성을 이용하여 객체의 직렬화를 제어할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
위 Comics 클래스를 아래와 같이 고쳐보겠습니다.&lt;br /&gt;
우선 직렬화를 사용하기 위해서 System.Runtime.Serialization 어셈블리를 프로젝트에 참조로 추가하여 주십시오.&lt;br /&gt;
클래스가 존재하는 파일의 using 절에&amp;nbsp; System.Runtime.Serialization 네임스페이스를 추가하여 주시구요.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;[&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataContract&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Comics&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; FileName { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; LocalPath { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DateTime&lt;/span&gt; Created { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;long&lt;/span&gt; FileSize { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; ThumnailPath { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IgnoreDataMember&lt;/span&gt;]&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;BitmapImage&lt;/span&gt; Thumnail { &lt;span style=&quot;color: blue;&quot;&gt;get&lt;/span&gt;; &lt;span style=&quot;color: blue;&quot;&gt;set&lt;/span&gt;; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
클래스를 위와 같이 수정하였습니다. 클래스에는 DataContractAttribute 특성이 추가되었고, 직렬화할 멤버들에 대해서는 DataMemberAttribute 특성을 추가하였습니다.&lt;br /&gt;
그리고, 마지막으로 직렬화에 추가하지 않을 Thumnail 속성에서는 IgnoreDataMemberAttribute 를 추가하여 명시적으로 직렬화에서 제외하였습니다.&lt;br /&gt;
참고로 DataContractAttribute를 이용한 직렬화에서는 DataMemberAttribute가 지정되지 않은 멤버들은 모두 직렬화에서 제외됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;List&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Comics&lt;/span&gt;&amp;gt; comicsList = GetCurrentComics();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Contains(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;] = comicsList;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Add(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;comics&quot;&lt;/span&gt;, comicsList);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageSettings&lt;/span&gt;.ApplicationSettings.Save();&lt;/p&gt;
&lt;/div&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
와 같이 설정파일에 저장하면, Thumnail 속성을 제외한 객체가 직렬화되어 설정파일에 저장됩니다.&lt;br /&gt;
&lt;br /&gt;
위와 같은 방법을 이용하여 설정파일만을 위한 새로운 클래스를 생성할 필요없이 기존에 사용하던 클래스에서 불필요한 멤버들을 제외하고 설정파일로 저장하는 것이 가능해 지는 것입니다.&lt;br /&gt;
&lt;br /&gt;
오늘은 여기까지 마치도록 하겠습니다.&lt;br /&gt;
혹시, 궁금하거나 잘못된 사항이 있으시면 댓글 부탁드리겠습니다.&lt;br /&gt;
&lt;br /&gt;
그럼 즐거운 하루 되십시오.&lt;br /&gt;</description>
      <category>Windows Phone 7</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/63</guid>
      <comments>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C%EC%9D%98-IsolatedStorageSettings-%ED%99%9C%EC%9A%A9#entry63comment</comments>
      <pubDate>Mon, 8 Nov 2010 16:38:57 +0900</pubDate>
    </item>
    <item>
      <title>Windows Phone 7에서 격리된 저장소의 압축파일을 SharpZipLib 활용하여 읽기(AS)</title>
      <link>https://whistle.tistory.com/entry/Windows-Phone-7%EC%97%90%EC%84%9C-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%9D%98-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC%EC%9D%84-SharpZipLib-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%BD%EA%B8%B0AS</link>
      <description>지난번 Windows Phone 7 에서 압축파일을 읽는 방법에 대한 글을 포스팅한 적이 있습니다. (보지 못하신 분은 &lt;a href=&quot;http://blog.ntils.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C-ZIP-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0&quot; target=&quot;_blank&quot;&gt;[Windows Phone 7] - Windows Phone 7 에서 ZIP 압축파일 읽기&lt;/a&gt; 를 보시면 되겠습니다.)&lt;br /&gt;
압축파일을 프로젝트에 추가해서 GetResourceStream 메서드를 이용하여 압축된 파일에 대한 Stream 객체를 얻고,&lt;br /&gt;
그 Stream 객체를 이용하여 ZipFile 클래스의 인스턴스를 생성하였는데요.&lt;br /&gt;
&lt;br /&gt;이번에 프로젝트 구현시에 격리된 저장소(Isolated Storage)에 저장된 파일을 IsolatedStorageFileStream 형태로 읽어서, 그 Stream을 ZipFile 클래스의 인스턴스 생성시 이용하고자 하니, 문제가 발생하였습니다.&lt;br /&gt;
SharpZipLib에서 따로 오류는 발생하지 않으나, 객체를 생성하는 과정에서 프로그램이 응답없음 상태로 빠지고 말더군요.&lt;br /&gt;
&lt;br /&gt;고민하다가, IsolatedStorageFileStream을 MemoryStream으로 옮겨서, 이 MemoryStream 을 이용하여 ZipFile 클래스의 인스턴스를 생성하는 방식으로 문제를 해결하였습니다.&lt;br /&gt;
&lt;br /&gt;코드는 아래와 같습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;System.IO.IsolatedStorage.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageFile&lt;/span&gt; isf = &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageFile&lt;/span&gt;.GetUserStoreForApplication();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; localPath = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;SamplePictures.zip&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;MemoryStream&lt;/span&gt; mStream = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;MemoryStream&lt;/span&gt;())&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageFileStream&lt;/span&gt; isfStream = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IsolatedStorageFileStream&lt;/span&gt;(localPath, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;FileMode&lt;/span&gt;.Open, isf))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; bufferSize = 40 * 1024;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt;[] buffer = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt;[bufferSize];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; readBytes = 0;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;do&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; readBytes = isfStream.Read(buffer, 0, bufferSize);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mStream.Write(buffer, 0, readBytes);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt; (readBytes &amp;gt; 0);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;ZipFile&lt;/span&gt; zipFile = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;ZipFile&lt;/span&gt;(mStream);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;

&lt;br /&gt;
코드에서 보면 격리된 저장소에 있는 SamplePictures.zip 파일을 IsolatedStorageFileStream 을 이용하여 읽어 MemoryStream으로 옮겨서 그 MemoryStream을 이용하여 ZipFile 객체를 생성하고 있습니다.&lt;br /&gt;
&lt;br /&gt;위와 같이 하시면, 격리된 저장소에 있는 압축파일(Zip파일)도 문제없이 사용하실 수 있습니다.&lt;br /&gt;</description>
      <category>Windows Phone 7</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/62</guid>
      <comments>https://whistle.tistory.com/entry/Windows-Phone-7%EC%97%90%EC%84%9C-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%9D%98-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC%EC%9D%84-SharpZipLib-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%BD%EA%B8%B0AS#entry62comment</comments>
      <pubDate>Mon, 8 Nov 2010 13:56:36 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET 보안 취약성 업데이트 공개</title>
      <link>https://whistle.tistory.com/entry/ASPNET-%EB%B3%B4%EC%95%88-%EC%B7%A8%EC%95%BD%EC%84%B1-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EA%B3%B5%EA%B0%9C</link>
      <description>얼마전 ASP.NET의 공격자가 암호화된 데이터나 시스템정보를 획득할 수 있는 보안 취약성이 발표되었고, &lt;br /&gt;
방어를 위한 방법들이 안내되었는데, 오늘 해당 취약성에 대한 업데이트가 공개되었습니다.&lt;br /&gt;
빨리 서비스중인 ASP.NET 서비스에 빨리 적용하시어, 피해가 없도록 해주세요.&lt;br /&gt;
&lt;br /&gt;
자세한 내용은 아래에서 확인하실 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
취약성 내용 : &lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx&quot;&gt;Important: ASP.NET Security Vulnerability&lt;/a&gt;&lt;br /&gt;
대처방안 : &lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/24/update-on-asp-net-vulnerability.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/24/update-on-asp-net-vulnerability.aspx&quot;&gt;Update on ASP.NET Vulnerability&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;업데이트 소개 및 다운로드&lt;/span&gt;: &lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx&quot;&gt;ASP.NET &lt;/a&gt;&lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx&quot;&gt;Security Update Now Av&lt;/a&gt;&lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx&quot;&gt;ai&lt;/a&gt;&lt;a title=&quot;[http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx&quot;&gt;lable&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
업데이트만 설치하시면 기존에 대처방안으로 안내된 작업은 하실 필요가 없습니다.&lt;br /&gt;</description>
      <category>ASP.NET</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/61</guid>
      <comments>https://whistle.tistory.com/entry/ASPNET-%EB%B3%B4%EC%95%88-%EC%B7%A8%EC%95%BD%EC%84%B1-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8-%EA%B3%B5%EA%B0%9C#entry61comment</comments>
      <pubDate>Wed, 29 Sep 2010 09:31:57 +0900</pubDate>
    </item>
    <item>
      <title>Windows Phone 7 에서 설정된 테마 알아오기</title>
      <link>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C-%EC%84%A4%EC%A0%95%EB%90%9C-%ED%85%8C%EB%A7%88-%EC%95%8C%EC%95%84%EC%98%A4%EA%B8%B0</link>
      <description>새로운 한주의 시작은 즐겁게 하고 계신가요?&lt;br /&gt;
이번에는 Windows Phone 7 의 테마 색상을 알아오는 방법에 대해서 알아보도록 하겠습니다.&lt;br /&gt;
Windows Phone 7 에서 테마의 설정은 Settings - theme 메뉴를 통해서 가능한데요. 에뮬레이터에서도 가능하니 한번 해보세요.&lt;br /&gt;
제공되는 테마는 &lt;span style=&quot;font-weight: bold;&quot;&gt;dark &lt;/span&gt;(검은색 바탕의 테마) 와 &lt;span style=&quot;font-weight: bold;&quot;&gt;light &lt;/span&gt;(하얀색 바탕의 테마) 가 있구요.&lt;br /&gt;
거기에다 타일의 색상 등을 결정하는 Accent color 를 설정하는 부분이 있습니다.&lt;br /&gt;
&lt;br /&gt;
WP7 어플리케이션을 작성할 때 사용자에게 일관된 사용자 경험을 제공하기 위해서 사용자가 직접 선택한 테마를 잘 활용하는 것도 중요할 수 있는데요.&lt;br /&gt;
테마의 색상을 알아오는 부분은 &lt;a title=&quot;[http://devlicio.us/blogs/derik_whittaker/archive/2010/07/27/how-to-detect-the-theme-being-used-in-wp7.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://devlicio.us/blogs/derik_whittaker/archive/2010/07/27/how-to-detect-the-theme-being-used-in-wp7.aspx&quot;&gt;http://devlicio.us/blogs/derik_whittaker/archive/2010/07/27/how-to-detect-the-theme-being-used-in-wp7.aspx&lt;/a&gt; 여기서 알 수 있었구요.&lt;br /&gt;
액센트 색상은 어떻게 알아올 수 있을까 생각해보았습니다.&lt;br /&gt;
&lt;br /&gt;
위 링크된 포스트에서와 같이 테마의 이름을 직접 가져오기는 힘든것 같구요. 현재 폰의 ForegroundColor 또는 BackgroundColor를 이용하여 테마를 유추해내는 방법을 사용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Color&lt;/span&gt; themeColor = (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Color&lt;/span&gt;)&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Application&lt;/span&gt;.Current.Resources[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;PhoneForegroundColor&quot;&lt;/span&gt;];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (themeColor.ToString() == &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFFFFFFF&quot;&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.PageTitle.Text = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Dark&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (themeColor.ToString() == &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#DE000000&quot;&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.PageTitle.Text = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Light&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/span&gt;

&lt;br /&gt;
현재 어플리케이션 리소스 중 글자색상을 나타내는 &lt;span style=&quot;font-weight: bold;&quot;&gt;PhoneForegroundColor &lt;/span&gt;리소스를 가져와서, 그 색상이 흰색이라면 테마는 Dark 이고, 색상의 검은색이라면 테마는 Light 입니다.&lt;br /&gt;
&lt;br /&gt;
물론, &lt;span style=&quot;font-weight: bold;&quot;&gt;PhoneBackgroundColor&lt;/span&gt; 를 이용하는 방법도 있습니다. 위와 동일한 방법이지만, 배경색은 색상자체가 테마를 나타내는 거죠.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;themeColor = (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Color&lt;/span&gt;)&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Application&lt;/span&gt;.Current.Resources[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;PhoneBackgroundColor&quot;&lt;/span&gt;];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (themeColor.ToString() == &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FF000000&quot;&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.PageTitle.Text = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Dark&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;else&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (themeColor.ToString() == &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFFFFFFF&quot;&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.PageTitle.Text = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Light&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/span&gt;

&lt;br /&gt;
그리고,&lt;span style=&quot;font-weight: bold;&quot;&gt; 액센트 색상&lt;/span&gt;을 가져오기 위해서는 &lt;span style=&quot;font-weight: bold;&quot;&gt;PhoneAccentColor&lt;/span&gt; 리소스를 이용하시면 됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Color&lt;/span&gt; accentColor = (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Color&lt;/span&gt;)&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Application&lt;/span&gt;.Current.Resources[&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;PhoneAccentColor&quot;&lt;/span&gt;];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt; accent = &lt;span style=&quot;color: blue;&quot;&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;switch&lt;/span&gt; (accentColor.ToString())&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFFF0097&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;magenta&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFA200FF&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;purple&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FF00ABA9&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;teal&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FF8CBF26&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;lime&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFA05000&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;brown&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFE671B8&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;pink&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFF09609&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;orange&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FF1BA1E2&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;blue&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FFE51400&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;red&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;case&lt;/span&gt; &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;#FF339933&quot;&lt;/span&gt;:&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; accent = &lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;green&quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;break&lt;/span&gt;;&amp;nbsp; &lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.PageTitle.Foreground = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;SolidColorBrush&lt;/span&gt;(accentColor);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;this&lt;/span&gt;.ApplicationTitle.Text = accent;&lt;/p&gt;
&lt;/span&gt;

&lt;br /&gt;
위 코드와 같이 현재는 윈도폰 테마에 대해서 직접적으로 알아 올 수 있는 방법은 없는듯 하지만, 위와 같이 약간의 코드를 이용하여 테마 및 액센트 색상을 가져올 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
끝까지 읽어주셔서 감사합니다.&lt;br /&gt;
즐거운 하루 되십시오.&lt;br /&gt;</description>
      <category>Windows Phone 7</category>
      <category>Accent Color</category>
      <category>Theme</category>
      <category>windows phone 7</category>
      <category>WP7</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/60</guid>
      <comments>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C-%EC%84%A4%EC%A0%95%EB%90%9C-%ED%85%8C%EB%A7%88-%EC%95%8C%EC%95%84%EC%98%A4%EA%B8%B0#entry60comment</comments>
      <pubDate>Mon, 13 Sep 2010 15:40:17 +0900</pubDate>
    </item>
    <item>
      <title>Windows Phone 7 에서 ZIP 압축파일 읽기</title>
      <link>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C-ZIP-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0</link>
      <description>이번에는 Windows Phone 7에서 압축파일에서 개별 파일을 읽는 방법에 대해서 알아보고자 합니다.&lt;br /&gt;
Silverlight 기반의 Windows Phone 7 응용프로그램의 배포에 사용되는 XAP 파일이 ZIP형식의 압축파일입니다.&lt;br /&gt;
C# 코드가 컴파일되어 있는 DLL과 XAML 파일, 리소스들이 이 압축파일에 포함되어 있죠.&lt;br /&gt;
그러니, 분명히 Windows Phone에서는 ZIP 압축파일을 해제하는 방법이 분명히 존재합니다.&lt;br /&gt;
하지만, 그 부분은 제공하는 API가 아무래도 좀 빈약하고, ZIP의 압축이나 압축해제의 용도로만 사용되는 것이 아니다 보니, 용도에 딱 들어맞지 않을 수 밖에 없습니다.&lt;br /&gt;
&lt;br /&gt;
그래서, 오픈소스로 제공되고 있는 &lt;a title=&quot;[http://www.icsharpcode.net/opensource/sharpziplib/]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.icsharpcode.net/opensource/sharpziplib/&quot;&gt;SharpZipLib&lt;/a&gt;을 이용하는 방법이 없을까하고 생각하던 중에, &lt;a title=&quot;[http://nicksnettravels.builttoroam.com/post/2010/06/05/Windows-Phone-7-Data-Json-WCF-Data-Service-with-IIS-7-Compression.aspx]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://nicksnettravels.builttoroam.com/post/2010/06/05/Windows-Phone-7-Data-Json-WCF-Data-Service-with-IIS-7-Compression.aspx&quot;&gt;Nick's .NET Travels :: Windows Phone 7 Data : Json WCF Data Service with IIS7 Compression&lt;/a&gt; 이라는 블로그 글에서 SharpZipLib을 WP7 용으로 컨버팅해서 제공하는 발견하고 얼른 받아서 구현해봤습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;a title=&quot;[http://www.builttoroam.com/wpsharpziplib.zip]로 이동합니다.&quot; target=&quot;_blank&quot; href=&quot;http://www.builttoroam.com/wpsharpziplib.zip&quot;&gt;SharpZipLib for Windows Phone : 다운로드&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
이번 샘플은 다수의 이미지 파일을 포함한 압축파일(ZIP)에서 이미지 파일을 추출하여 보여주는 형태로 만들었습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px solid rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
아래 샘플소스는 Windows Phone Developer Tools Beta 를 이용하여 만들어 졌으며, RTM 버전에서의 테스트도 완료되었습니다.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: 12pt; font-weight: bold;&quot;&gt;압축된 이미지파일 보여주기 샘플 구현&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;새로운 &lt;span style=&quot;font-weight: bold;&quot;&gt;Windows Phone Application&lt;/span&gt; 프로젝트를 생성합니다.&lt;/li&gt;
&lt;li&gt;Solution Explorer에서 솔루션을 선택하고 Add - Existing Project...를 선택하여 다운로드 받은 파일에서 &lt;span style=&quot;font-weight: bold;&quot;&gt;wpICSharpCode.SharpZLib.csproj&lt;/span&gt; 를 선택하여 프로젝트를 추가합니다.&lt;/li&gt;
&lt;li&gt;Windows Phone Application 프로젝트에서 &lt;span style=&quot;font-weight: bold;&quot;&gt;Add Reference&lt;/span&gt; 를 선택하고, 추가한 Projects 탭에서 wpICSharpCode.SharpZLib 을 추가해 주세요.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/1435C20C4C889D9B4B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F1435C20C4C889D9B4B&quot; width=&quot;584&quot; height=&quot;337&quot; alt=&quot;&quot; filename=&quot;cfile27.uf@1435C20C4C889D9B4B6D9D.png&quot; filemime=&quot;&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;이미지 파일들로 구성된 압축파일을 Window Phone Application 프로젝트에 추가하고, Properties 창에서 &lt;span style=&quot;font-weight: bold;&quot;&gt;Build Action&lt;/span&gt; 을 &lt;span style=&quot;font-weight: bold;&quot;&gt;Content&lt;/span&gt; 로 변경하여 주십시오.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/150BE0234C89A9F6B0&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F150BE0234C89A9F6B0&quot; width=&quot;287&quot; height=&quot;401&quot; alt=&quot;&quot; filename=&quot;2010-09-10 오후 12-46-54.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;MainPage.xaml 의 UI는 아래와 같이 구성하였습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/160F31224C89AA5E0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F160F31224C89AA5E0A&quot; width=&quot;235&quot; height=&quot;432&quot; alt=&quot;&quot; filename=&quot;Design.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;이제 PhoneApplicationPage 의 &lt;span style=&quot;font-weight: bold;&quot;&gt;Loaded &lt;/span&gt;이벤트와 prevButton 그리고 nextButton 버튼의 &lt;span style=&quot;font-weight: bold;&quot;&gt;Clicked&lt;/span&gt; 이벤트에 각각의 이벤트 핸들러를 등록하여 주십시오.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;클래스 멤버변수로 압축파일의 정보를 보관할 ISharpCode.SharpzipLib.Zip 네임스페이스의 ZipFile 클래스와 현재 이미지 파일의 인덱스를 관리할 Int32형식의 변수를 선언합니다.&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;br /&gt;
public&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;partial&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;MainPage&lt;/span&gt; : &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;PhoneApplicationPage&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;ZipFile&lt;/span&gt; _zipfile = &lt;span style=&quot;color: blue;&quot;&gt;null&lt;/span&gt;;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; _fileIndex = -1;&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;페이지가 로드되면 리소스 파일로 첨부한 SamplePictures.zip 파일을 이용하여 ZipFile 클래스의 인스턴스를 생성하고 로드시에 첫 페이지를 출력할 수 있도록 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; PhoneApplicationPage_Loaded(&lt;span style=&quot;color: blue;&quot;&gt;object&lt;/span&gt; sender, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;StreamResourceInfo&lt;/span&gt; zipStreamResource = &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Application&lt;/span&gt;.GetResourceStream(&lt;span style=&quot;color: blue;&quot;&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Uri&lt;/span&gt;(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;SamplePictures.zip&quot;&lt;/span&gt;, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;UriKind&lt;/span&gt;.Relative));&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _zipfile = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;ZipFile&lt;/span&gt;(zipStreamResource.Stream);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveNextImage();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
위 코드에서 ZipFile 클래스의 인스턴스를 생성하기 위하여 Stream 을 이용하는 것을 알 수 있습니다. 우리는 압축파일을 리소스 형태로 추가하였으므로, StreamResourceInfo 객체에서 Stream 객체를 획득할 수 있습니다.&lt;br /&gt;
만일, 격리된 저장소에 파일이 존재한다면, 이전 포스트인 &lt;a href=&quot;http://blog.ntils.com/entry/%EC%9B%B9%EC%97%90%EC%84%9C-Windows-Phone-7%EC%9D%98-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EA%B8%B0&quot; target=&quot;_blank&quot;&gt;[Windows Phone 7] - 웹에서 Windows Phone 7의 격리된 저장소로 파일 다운로드 받기&lt;/a&gt; 에 격리된 저장소에서 파일 읽는 방법이 구현되어 있으므로 참고하시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;가장 핵심이라고 할 수 있는 압축(ZIP)파일에서 이미지를 읽어오는 코드를 포함할 ViewImage라는 메서드를 생성하고 아래와 같이 구현합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; ViewImage()&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;ZipEntry&lt;/span&gt; entry = _zipfile[_fileIndex];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;String&lt;/span&gt; entryFileName = entry.Name;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Stream&lt;/span&gt; zipStream = _zipfile.GetInputStream(entry))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt;[] buffer = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;byte&lt;/span&gt;[4096];&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; readBytes;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;MemoryStream&lt;/span&gt; mStream = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;MemoryStream&lt;/span&gt;())&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;do&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; readBytes = zipStream.Read(buffer, 0, buffer.Length);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mStream.Write(buffer, 0, readBytes);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;span style=&quot;color: blue;&quot;&gt;while&lt;/span&gt; (readBytes &amp;gt; 0);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;BitmapImage&lt;/span&gt; image = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;BitmapImage&lt;/span&gt;();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; image.SetSource(mStream);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; contentImage.Source = image;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; mStream.Close();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; zipStream.Close();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
ZipFile 객체에서 현재 인덱스의 파일을 가져오면 &lt;span style=&quot;font-weight: bold;&quot;&gt;ZipEntry &lt;/span&gt;클래스의 객체를 가져올 수 있으며, 이 ZipEntry 객체의 &lt;span style=&quot;font-weight: bold;&quot;&gt;GetInputStream&lt;/span&gt;을 이용하여 압축되어 있는 파일의 스트림을 획득할 수 있습니다.&lt;br /&gt;
하지만, 주의할 점은 현재 획득한 스트림을 이용하여 바로 BitmapImage 객체를 생성할 수가 없습니다.&lt;br /&gt;
이를 위해 코드에서는 MemoryStream에 압축 파일의 스트림을 기록하여 BitmapImage 객체를 생성하고 있습니다.&lt;br /&gt;
그리고, 생성한 BitmapImage 객체를 contentImage 컨트롤에 소스로 등록하여 이미지를 출력합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;압축 파일에는 다수의 이미지가 존재하므로 전후로 이동하기 위해서 아래와 같은 코드를 등록합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; MoveNextImage()&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (_fileIndex + 1 &amp;lt; _zipfile.Count)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _fileIndex++;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ViewImage();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; MovePrevImage()&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (_fileIndex - 1 &amp;gt;= 0)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _fileIndex--;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ViewImage();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
ZipFile 객체에서 Count 속성을 통해 압축파일내에 있는 파일의 갯수를 알 수 있습니다&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;마지막으로 prevButton 와 nextButton 버튼 컨트롤의 Click 이벤트 핸들러를 추가합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; nextButton_Click(&lt;span style=&quot;color: blue;&quot;&gt;object&lt;/span&gt; sender, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MoveNextImage();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;void&lt;/span&gt; prevButton_Click(&lt;span style=&quot;color: blue;&quot;&gt;object&lt;/span&gt; sender, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;RoutedEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MovePrevImage();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;br /&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;프로젝트를 실행하면 압축파일에 포함된 이미지가 출력됨을 알 수 있습니다.&lt;br /&gt;
또한 버튼을 이용하여 다음 이미지 및 이전 이미지로의 이동이 가능합니다.&lt;br /&gt;
&lt;div class=&quot;imageblock triple&quot; style=&quot;text-align: center;&quot;&gt;
  &lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/206C2F204C89B2823A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F206C2F204C89B2823A&quot; width=&quot;200&quot; height=&quot;366&quot; alt=&quot;&quot;/&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/126C2F204C89B2833B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F126C2F204C89B2833B&quot; width=&quot;200&quot; height=&quot;366&quot; alt=&quot;&quot;/&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/136C2F204C89B2833C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F136C2F204C89B2833C&quot; width=&quot;200&quot; height=&quot;366&quot; alt=&quot;&quot;/&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;border: 1px dashed rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
만일 실행 시에 PlatformNotSupportedException 이 발생한다면, wpICSharpCode.SharpZLib 프로젝트에서 Zip 폴더내의 ZipConstraints.cs 파일에서&lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Encoding&lt;/span&gt;.GetEncoding(DefaultCodePage)&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
부분을 아래와 같이 변경하여 주십시오.&lt;br /&gt;
&lt;div style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Encoding&lt;/span&gt;.UTF8&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
이는 현재 Windows Phone 7 에서는 Encoding 이 UTF-8 만을 지원하므로, 다른 형식의 인코딩을 이용하고자 하여 발생하는 문제입니다.&lt;br /&gt;
한국어가 지원되는 Windows Phone 7 이 나올때 쯤이면 이 문제도 해결되지 않을까 생각합니다.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
샘플 프로젝트 파일을 따로 올렸으니 참고하시기 바랍니다.&lt;br /&gt;
첨부된 파일에는 업로드 용량관계로 압축파일이 포함되어 있지 않으니, 압축파일을 추가하여 사용하시면 됩니다.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/194D82354C89B83225&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;ZipSolutions.zip&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;border: 1px dashed rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;격리된 저장소에서 Zip파일을 읽어 오실경우에는 &lt;a href=&quot;http://blog.ntils.com/entry/Windows-Phone-7%EC%97%90%EC%84%9C-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%9D%98-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC%EC%9D%84-SharpZipLib-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9D%BD%EA%B8%B0AS&quot; target=&quot;_blank&quot;&gt;[Windows Phone 7] - Windows Phone 7에서 격리된 저장소의 압축파일을 SharpZipLib 활용하여 읽기(AS)&lt;/a&gt; 를 확인하여 주십시오.&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
끝까지 읽어 주셔서 감사합니다.&lt;br /&gt;
&lt;br /&gt;
그럼 좋은 하루 되십시오.&lt;br /&gt;</description>
      <category>Windows Phone 7</category>
      <category>windows phone 7</category>
      <category>WP7</category>
      <category>ZIP 압축</category>
      <category>압축해제</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/59</guid>
      <comments>https://whistle.tistory.com/entry/Windows-Phone-7-%EC%97%90%EC%84%9C-ZIP-%EC%95%95%EC%B6%95%ED%8C%8C%EC%9D%BC-%EC%9D%BD%EA%B8%B0#entry59comment</comments>
      <pubDate>Fri, 10 Sep 2010 13:50:23 +0900</pubDate>
    </item>
    <item>
      <title>Windows Phone 7 에서 설치되지 않은 폰트 사용하기</title>
      <link>https://whistle.tistory.com/entry/Windows-Phone-7%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%ED%8F%B0%ED%8A%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-2</link>
      <description>&lt;p&gt;오늘은 Windows Phone에 기본적으로 사용되는 폰트 외에 직접 추가한 폰트를 사용하는 방법에 대해서 알아볼까합니다.&lt;br /&gt;
&lt;br /&gt;
우선 WP7은 타이포그라피가 UX의 핵심에 있는 METRO라는 디자인컨셉을 가지고 있다보니, 기본 폰트가 상당히 예쁩니다.&lt;/p&gt;
&lt;p&gt;그냥 사용하더라도 아무런 불만이 없을 정도죠. (참고로 WP7에서 사용되는 기본 폰트는 Segeo WP 라는 폰트로 Microsoft에서 직접 만든 폰트라고 합니다.)&lt;/p&gt;
&lt;p&gt;하지만 세상이라는게 그렇습니까? 자신만의 폰트로 개성을 표현하고 싶어질 것입니다.&lt;br /&gt;
&lt;br /&gt;
불행하게도 WP7은 샌드박스모델을 사용하다 보니, 어플리케이션이 시스템 폴더에 접근하는 것이 불가능합니다.&lt;/p&gt;
&lt;p&gt;즉, 어플리케이션이 새로운 폰트를 시스템에 설치할 수 가 없는것이죠.&lt;/p&gt;
&lt;p&gt;하지만, 너무 실망할 필요는 없습니다. 어플리케이션에서 사용할 폰트를 해당 어플리케이션의 리소스로 등록하여, &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;그 폰트를 불러와 사용한다면 적어도 내 어플리케이션 안에서 만큼은 기본 폰트 외의 사용자 지정 폰트를 사용하는 것이 가능합니다.&lt;br /&gt;
&lt;br /&gt;
이번에는 어플리케이션에 폰트를 리소스로 등록하여 놓고, 그 폰트를 사용하는 간단한 샘플 어플리케이션을 만들어 보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;p style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;Visual Studio 에서의 사용자 지정 폰트 사용하기&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;ol&gt;
   &lt;li&gt;Visual Studio에서 &lt;strong&gt;Silverlight Application for Winodws Phone&lt;/strong&gt; 프로젝트를 생성해 주십시오.       &lt;br /&gt;
&lt;/li&gt;
    &lt;li&gt;솔루션 탐색기에서 프로젝트 내에 &lt;strong&gt;Fonts&lt;/strong&gt; 라는 폴더를 생성하세요.       &lt;br /&gt;
&lt;/li&gt;
    &lt;li&gt;사용하고자 하는 폰트를 Fonts 폴더에 추가해주시고, 속성창에서 각 폰트파일의 &lt;strong style=&quot;color: rgb(227, 22, 0);&quot;&gt;Build Action&lt;/strong&gt; 을 &lt;strong style=&quot;color: rgb(227, 22, 0);&quot;&gt;Content&lt;/strong&gt;로 변경하여 주세요. (여기서는 Hawaii Killer 라는 폰트와 Scriptina 라는 폰트를 추가하였습니다.)       &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/1479F5284C88738186&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F1479F5284C88738186&quot; width=&quot;297&quot; height=&quot;278&quot; alt=&quot;&quot; filename=&quot;2010-09-09 오후 12-59-02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/134283244C88739454&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F134283244C88739454&quot; width=&quot;293&quot; height=&quot;193&quot; alt=&quot;&quot; filename=&quot;2010-09-09 오후 1-01-08.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
    &lt;li&gt;Mainpage.xaml 의 UI 구성은 아래와 같이 구성을 하였습니다.      &lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/127DB9284C8873A571&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F127DB9284C8873A571&quot; width=&quot;231&quot; height=&quot;416&quot; alt=&quot;&quot; filename=&quot;2010-09-09 오후 12-59-59.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
    &lt;li&gt;Mainpage.xaml 에서 PageTitle TextBlock의 XAML코드에 아래 내용을 추가하여 주십시오.      &lt;br /&gt;
&lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;span style=&quot;color: red;&quot;&gt;FontFamily&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&quot;Fonts\SCRIPTIN.ttf#Scriptina&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
이 부분이 XAML 코드에서 사용자 지정 폰트를 사용하도록 지정하는 부분입니다.&lt;br /&gt;
일반적으로 &lt;strong&gt;FontFamily&lt;/strong&gt;속성은 설치된 폰트의 폰트패밀리의 이름을 지정하여 사용하지만, 리소스로 추가된 폰트를 사용하고자 한다면 &lt;strong&gt;폰트파일경로#폰트패밀리명&lt;/strong&gt; 과 같은 형식으로 사용하실 수 있습니다.&lt;br /&gt;
위에서는 폰트경로가 Fonts\SCRIPTIN.ttf 이고 폰트패밀리가 Scriptina 가 되는 것입니다.&lt;br /&gt;
파일명과 폰트패밀리명은 다를 수 있으므로, 주의해주십시오.&lt;br /&gt;
&lt;br /&gt;
   &lt;/li&gt;
    &lt;li&gt;XAML 코드에서 직접지정하여 폰트를 사용하실 수 도 있지만, 상황에 따라 폰트를 사용해야 한다면 코드 상에서 폰트를 로드하여 사용하여야 할텐데요.&lt;br /&gt;
이때는 Control 의 &lt;strong&gt;FontSource&lt;/strong&gt; 속성과 &lt;strong&gt;FontFamily&lt;/strong&gt; 속성을 이용하여 사용자 지정 폰트를 사용할 수 있습니다.&lt;br /&gt;
추가했던 fontChangeButton 버튼 컨트롤에 Click 이벤트 핸들러를 등록합니다.&lt;br /&gt;
코드 비하인트 파일인 MainPage.xaml.cs 파일에서 fontChangeButton의 Click 이벤트 핸들러 메서드에 아래와 같은 코드를 추가하여 주십시오.       &lt;br /&gt;
&lt;br /&gt;
      &lt;span style=&quot;color: black; font-family: NanumGothicCoding,Consolas,Courier New; font-size: 9pt; line-height: 100%; background: none repeat scroll 0% 0% transparent;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;StreamResourceInfo&lt;/span&gt; fontResourceInfo = &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Application&lt;/span&gt;.GetResourceStream(&lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Uri&lt;/span&gt;(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Fonts/Hawaii_Killer.ttf&quot;&lt;/span&gt;, &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;UriKind&lt;/span&gt;.Relative));&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;FontSource&lt;/span&gt; fontSource = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;FontSource&lt;/span&gt;(fontResourceInfo.Stream);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;customFontTextBlock.FontSource = fontSource;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;customFontTextBlock.FontFamily = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;FontFamily&lt;/span&gt;(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;Hawaii Killer&quot;&lt;/span&gt;);&lt;/p&gt;
&lt;/span&gt;&lt;br /&gt;
코드를 보자면 Bulid Action 이 Content로 지정된 리소스 파일을 Application 클래스의 &lt;strong&gt;GetResourceStream&lt;/strong&gt; 메서드를 이용하여 가져오고, 가져온 리소스 스트림을 이용하여 &lt;strong&gt;FontSource&lt;/strong&gt; 객체를 생성합니다.       &lt;br /&gt;
TextBlock 객체인 customFontTextBlock의 &lt;strong&gt;FontSource&lt;/strong&gt; 속성에 생성한 FontSource를 설정하여, 사용자 지정 폰트를 사용할 수 있도록 설정합니다.       &lt;br /&gt;
그리고는 마지막으로는 사용할 폰트 패밀리명을 &lt;strong&gt;FontFamily&lt;/strong&gt; 속성에 설정하여 줍니다.&lt;br /&gt;
FontSource 만 설정하고 FontFamily를 설정하지 않으면 적용되지 않으니, 꼭 FontFamily 도 설정하여 주세요.&lt;br /&gt;
여기까지의 결과가 XAML 코드에서 &lt;strong&gt;FontFamily=&quot;Fonts\Hawaii_Killer.ttf#Hawaii Killer&quot;&lt;/strong&gt; 와 동일한 기능을 하게됩니다.       &lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
    &lt;li&gt;이제 프로젝트를 실행하면, 아래와 같은 화면이 출력됩니다.            &lt;br /&gt;
&lt;div class=&quot;imageblock dual&quot; style=&quot;text-align: center;&quot;&gt;
  &lt;table cellspacing=&quot;5&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;margin: 0 auto;&quot;&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/20403D244C8873DB47&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F20403D244C8873DB47&quot; width=&quot;230&quot; height=&quot;422&quot; alt=&quot;&quot;/&gt;&lt;/td&gt;
      &lt;td&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/11403D244C8873DB48&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F11403D244C8873DB48&quot; width=&quot;230&quot; height=&quot;422&quot; alt=&quot;&quot;/&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/div&gt;
&lt;br /&gt;
처음 로드가 완료된 화면에서는 XAML 코드에서 지정된 PageTitle TextBlock의 폰트가 변경되었음을 알 수 있으며,        &lt;br /&gt;
Change Font 버튼을 클릭하여 기본 폰트로 출력되던 텍스트가 새로운 폰트로 변경되었음을 두번째 화면에서 보실 수 있습니다.         &lt;br /&gt;
&lt;br /&gt;
   &lt;/li&gt;
 &lt;/ol&gt;
  &lt;p&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px dashed rgb(203, 203, 203); background-color: rgb(255, 255, 255); padding: 10px;&quot; class=&quot;txc-textbox&quot;&gt;
참고하실 점은 아직까지는 한글 폰트에 대한 적용은 완전하지 않은 듯 합니다.    &lt;br /&gt;
한글 폰트로 테스트해보았을때는 폰트의 적용이 제대로 되지 않았는데, 영문폰트로 교체하니 제대로 적용이되네요.     &lt;br /&gt;
정식판이 나오면 수정되지 않을까하는 막연한 기대를 가져봅니다.     &lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
이번 글을 여기까지 입니다.     &lt;br /&gt;
프로젝트 소스는 따로 첨부하여 드리니, 필요하신 분은 참고하시구요.     &lt;br /&gt;
수고하셨구요. 끝까지 읽어주셔서 감사합니다.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/1213C1144C88748E3F&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;CustomFontSolutions.zip&lt;/a&gt;&lt;/div&gt;</description>
      <category>Windows Phone 7</category>
      <category>Font</category>
      <category>windows phone 7</category>
      <category>WP7</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/58</guid>
      <comments>https://whistle.tistory.com/entry/Windows-Phone-7%EC%97%90%EC%84%9C-%EC%84%A4%EC%B9%98%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%ED%8F%B0%ED%8A%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-2#entry58comment</comments>
      <pubDate>Thu, 9 Sep 2010 14:38:43 +0900</pubDate>
    </item>
    <item>
      <title>웹에서 Windows Phone 7의 격리된 저장소로 파일 다운로드 받기</title>
      <link>https://whistle.tistory.com/entry/%EC%9B%B9%EC%97%90%EC%84%9C-Windows-Phone-7%EC%9D%98-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EA%B8%B0</link>
      <description>&lt;P&gt;이번 글은 네이버 윈도우폰 개발자 모임에서 진행중인 Windows Phone 7 스터디에서 원격지(웹)상에 존재하는 파일을 WP7에 어떻게 저장하는가에 대한 궁금증이 생겨서 구현해보고 작성하는 블로그 포스트입니다.&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;Windows Phone 7 은 샌드박스 모델을 사용하는 관계로 시스템의 저장공간을 마음대로 사용할 수가 없습니다.&lt;/P&gt;
&lt;P&gt;WP7 어플리케이션은 각 어플리케이션 마다 격리된 저장소를 할당 받고, 그 격리된 저장소 내의 파일들에 대해서만 읽고 쓰기가 가능합니다. 물론, 각종 미디어 파일(비디오, 사진 등)은 공용 스토리지를 이용하여 사용할 수 있습니다.&lt;/P&gt;
&lt;P&gt;&lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(238,238,238) 1px solid; BORDER-LEFT: rgb(238,238,238) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(238,238,238) 1px solid; BORDER-RIGHT: rgb(238,238,238) 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;아래 구현된 소스는 Windows Phone 7 Developer Tools Beta 버전으로 구현되었습니다.&lt;/DIV&gt;&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-WEIGHT: bold&quot;&gt;샘플 소스의 개요&lt;/SPAN&gt;&lt;br /&gt;

&lt;UL style=&quot;LIST-STYLE-TYPE: disc&quot;&gt;
&lt;LI&gt;샘플 소스에는 파일 다운로드를 위한 테스트용 웹 응용프로그램 프로젝트(ASP.NET MVC 2) 가 존재하며,&lt;br /&gt;
이 프로젝트를 이용하여 WP7에서 파일 다운로드를 구현합니다.&lt;/LI&gt;
&lt;LI&gt;Windows Phone Application 프로젝트에서는 위 웹 응용프로그램에서 파일을 다운로드하여, 어플리케이션에 할당된 격리된 저장소에 파일을 저장하고, 이후 격리된 저장소에 저장된 파일들의 목록을 보여줍니다.&lt;/LI&gt;
&lt;LI&gt;저장소에 저장된 파일의 리스트에서 항목을 선택하면, TXT 파일일 경우에는 그 내용을 TextBlock에 출력합니다.&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-WEIGHT: bold&quot;&gt;다운로드를 위한 테스트용 웹사이트의 구현&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;웹사이트는 단지 다운로드 기능만이 있으면 되므로, /Download 경로로 접속시에 지정한 파일을 전송해주는 기능만을 구현합니다.&lt;br /&gt;

&lt;OL style=&quot;LIST-STYLE-TYPE: decimal&quot;&gt;
&lt;LI&gt;Visual Studio 2010 에서 새로운 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;ASP.NET MVC 2 Empty Web Application&lt;/SPAN&gt; 프로젝트를 생성합니다.&lt;br /&gt;
&lt;/LI&gt;
&lt;LI&gt;웹 응용프로그램 프로젝트 루트 경로에 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;Files &lt;/SPAN&gt;라는 이름의 폴더를 추가하고, WP7으로 전송할 파일을 추가합니다.&lt;br /&gt;
여기서는 ibatis.licence.txt 라는 파일을 추가하였습니다.&lt;br /&gt;
&lt;/LI&gt;
&lt;LI&gt;Controllers 폴더에 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;DownloadController&lt;/SPAN&gt;라는 새로운 컨트롤러 클래스를 추가합니다.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/124FD2054C544B8666&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F124FD2054C544B8666&quot; width=&quot;250&quot; height=&quot;253&quot; alt=&quot;&quot; filename=&quot;image_8.png&quot; filemime=&quot;&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/LI&gt;
&lt;LI&gt;DownloadController 클래스에는 아래와 같은 코드를 추가합니다.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 1em; FONT-FAMILY: nanumgothiccoding,consolas,courier-new&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; downloadButton_Click(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; fileUrl = &lt;SPAN style=&quot;COLOR: rgb(163,21,21)&quot;&gt;&quot;http://localhost:2975/Download&quot;&lt;/SPAN&gt;; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 파일 다운로드를 위한 URL 경로&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt; request = &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt;.Create(fileUrl) &lt;SPAN style=&quot;COLOR: blue&quot;&gt;as&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; request.BeginGetResponse(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;AsyncCallback&lt;/SPAN&gt;(DownloadCallback), request);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;Properties 폴더를 더블클릭하거나, 프로젝트의 속성을 선택하여 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;Web 탭&lt;/SPAN&gt;에서 항상 동일한 포트를 이용하도록 설정하여 줍니다.&lt;br /&gt;
&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/182A3F374C8902B023&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F182A3F374C8902B023&quot; width=&quot;518&quot; height=&quot;222&quot; alt=&quot;&quot; filename=&quot;2010-09-10 오전 12-51-38.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/LI&gt;
&lt;LI&gt;웹 프로젝트를 실행하고 /Download 경로로 접속하여 파일이 다운로드가 되는지 확인하여 주세요.&lt;br /&gt;
&lt;/LI&gt;&lt;/OL&gt;&lt;br /&gt;
&lt;SPAN style=&quot;FONT-SIZE: 12pt; FONT-WEIGHT: bold&quot;&gt;Window Phone 7 에서 웹 다운로드 구현&lt;/SPAN&gt;&lt;br /&gt;

&lt;OL style=&quot;LIST-STYLE-TYPE: decimal&quot;&gt;
&lt;LI&gt;Visual Studio 2010 Express for Windows Phone 이나 Visual Studio 2010 에서 Silverlight for Windows Phone 프로젝트 템플릿 그룹에서 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;Windows Phone Application&lt;/SPAN&gt; 을 선택하여 새로운 프로젝트를 생성합니다.&lt;/LI&gt;
&lt;LI&gt;MainPage.xaml 페이지의 UI는 아래와 같이 구현하였습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/165E47014C544B8601&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F165E47014C544B8601&quot; width=&quot;250&quot; height=&quot;460&quot; alt=&quot;&quot; filename=&quot;image_ab022dd0-06af-47b3-ba9e-f2456fdc0a46.png&quot; filemime=&quot;&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;downloadButton&lt;/SPAN&gt;에 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;Click 이벤트&lt;/SPAN&gt;에 대한 이벤트 핸들러를 등록하고, 코드 비하인드 파일에서 아래와 같은 코드를 추가하여 주세요.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 1em; FONT-FAMILY: nanumgothiccoding,consolas,courier-new&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; downloadButton_Click(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;RoutedEventArgs&lt;/SPAN&gt; e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; fileUrl = &lt;SPAN style=&quot;COLOR: rgb(163,21,21)&quot;&gt;&quot;http://localhost:2975/Download&quot;&lt;/SPAN&gt;; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 파일 다운로드를 위한 URL 경로&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt; request = &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt;.Create(fileUrl) &lt;SPAN style=&quot;COLOR: blue&quot;&gt;as&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; request.BeginGetResponse(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;AsyncCallback&lt;/SPAN&gt;(DownloadCallback), request);&lt;br /&gt;
}&lt;/SPAN&gt;&lt;br /&gt;
&lt;br /&gt;위 코드에서는 파일을 다운로드 받기 위해서 HttpWebRequest 클래스를 이용하도록 하였습니다.&lt;br /&gt;
주의할 점은 Silverlight 는 HttpWebRequest 의 동기방식의 호출을 지원하지 않습니다.&lt;br /&gt;
그러므로, HttpWebRequest 객체에서 HttpWebResponse 객체를 얻기위해서는 BeginGetResponse 메서드와 EndGetResponse 메서드를 이용하여 비동기 방식으로 HttpWebResponse 객체를 가져와야 합니다.&lt;br /&gt;
&lt;br /&gt;&lt;/LI&gt;
&lt;LI&gt;HttpWebResponse 객체를 얻기 위하여 BeginGetResponse 메서드를 호출하였으니, HTTP 요청이 완료된 시점에 실행할 DownloadCallback 메서드를 구현하여야 합니다.&lt;br /&gt;
위 코드에서 BeginGetResponse 메서드 호출시에 콜백메서드로 DownloadCallback 이라는 이름의 메서드를 지정하였음을 보실 수 있을 겁니다. 이 메서드는 아래와 같이 구현합니다.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 1em; FONT-FAMILY: nanumgothiccoding,consolas,courier-new&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; DownloadCallback(&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IAsyncResult&lt;/SPAN&gt; asyncronousResult)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// BeginGetResponse 메서드의 state 매개변수로부터 전달받은 HttpWebRequest객체의&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// EndGetResponse 메서드를 호출하여 HttpWebResponse 객체를 획득한다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt; request = (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebRequest&lt;/SPAN&gt;)asyncronousResult.AsyncState;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebResponse&lt;/SPAN&gt; response = (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;HttpWebResponse&lt;/SPAN&gt;)request.EndGetResponse(asyncronousResult);&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 저장할 파일명을 가져옵니다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; filename = GetFileName(response.Headers[&lt;SPAN style=&quot;COLOR: rgb(163,21,21)&quot;&gt;&quot;Content-Disposition&quot;&lt;/SPAN&gt;]);&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;try&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// HttpWebResponse의 스트림을 이용하여 격리된 저장소에 파일을 쓴다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;using&lt;/SPAN&gt; (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;Stream&lt;/SPAN&gt; stream = response.GetResponseStream())&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt; appStorage = &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt;.GetUserStoreForApplication();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;using&lt;/SPAN&gt; (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFileStream&lt;/SPAN&gt; fileStream = &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFileStream&lt;/SPAN&gt;(filename, &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;FileMode&lt;/SPAN&gt;.OpenOrCreate, appStorage))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;byte&lt;/SPAN&gt;[] buffer = &lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;byte&lt;/SPAN&gt;[32768];&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;int&lt;/SPAN&gt; readBytes;&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;while&lt;/SPAN&gt; ((readBytes = stream.Read(buffer, 0, buffer.Length)) &amp;gt; 0)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileStream.Write(buffer, 0, readBytes);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;catch&lt;/SPAN&gt; (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;Exception&lt;/SPAN&gt;) { }&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// UI Thread에 접근하려고 할 경우에는 UnauthorizedAccessException이 발생한다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;this&lt;/SPAN&gt;.Dispatcher.BeginInvoke(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;delegate&lt;/SPAN&gt;()&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DisplayFiles();&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;
}&lt;br /&gt;
&lt;/SPAN&gt;&lt;br /&gt;
BeginGetResponse 메서드를 호출할 때 두번째 매개변수로 생성하였던 HttpWebRequest 객체를 전달하였으므로, 콜백메서드에서는 IAsyncResult 매개변수에서 AsyncState 속성을 통하여 전달하였던 HttpWebRequest 객체를 획득할 수 있습니다.&lt;br /&gt;
이제, HttpWebRequest 객체에서 EndGetResponse 메서드를 호출하여 웹 요청에 대한 응답인 HttpWebResponse 객체를 가져올 수 있습니다.&lt;br /&gt;
&lt;br /&gt;이제 다운로드 받은 파일을 WP7 로컬 스토리지에 파일을 저장하여야 합니다.&lt;br /&gt;
서두에 말씀드렸다시피, WP7에서는 각 어플리케이션에 할당된 격리된 저장소로의 파일 저장 및 읽기를 지원하므로, 다운로드 받은 파일은 격리된 저장소에 저장하여야 합니다.&lt;br /&gt;
Silverlight에서는 격리된 저장소에 접근하기 위해 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;IsolatedStorageFile &lt;/SPAN&gt;클래스를 제공하고 있습니다.&lt;br /&gt;
IsolateStorageFile 클래스의 정적메서드인 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;GetUserStoreForApplication&lt;/SPAN&gt; 메서드를 이용하면, 현재 어플리케이션에 할당된 격리된 저장소의 정보를 가져올 수 있습니다.&lt;br /&gt;
그리고, 웹에서 다운로드한 파일을 저장하기 위하여 코드에서는 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;IsolateStorageFileStream&lt;/SPAN&gt;을 이용하여 저장소에 파일을 저장하고 있습니다.&lt;br /&gt;
&lt;br /&gt;마지막 부분에서는 파일의 저장이 완료되면 ListBox에 다운로드 받은 파일의 리스트를 출력하기 위하여 DisplayFiles 메서드를 호출하고 있습니다.&lt;br /&gt;
여기서 만일 바로 DisplayFiles 메서드를 호출하게 된다면, UnauthorizedAccessException이 발생하게 됩니다.&lt;br /&gt;
이는 지금 실행되고 있는 DownloadCallback 메서드는 비동기 호출로 인하여 UI 스레드인 메인스레드와는 다른&amp;nbsp; 스레드에서 실행되고 있으므로 UI 스레드의 컨트롤에 접근하는 코드를 가진 DisplayFiles 메서드에 바로 접근하려고 하면 오류가 발생하는 것입니다.&lt;br /&gt;
이럴때는 코드와 같이 Dispatcher를 이용하여 메서드를 실행하면 문제를 해결할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;&lt;/LI&gt;
&lt;LI&gt;격리된 저장소에 저장된 파일의 리스트를 fileListBox 컨트롤에 출력하기 위한 DisplayFiles 메서드는 아래와 같이 구현합니다.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 1em; FONT-FAMILY: nanumgothiccoding,consolas,courier-new&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; DisplayFiles() &lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 격리된 저장소에 저장된 전체 파일들의 이름을 ListBox에 출력한다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt; appStorage = &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt;.GetUserStoreForApplication();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileListBox.Items.Clear();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt;[] files = appStorage.GetFileNames();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;foreach&lt;/SPAN&gt; (&lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; filename &lt;SPAN style=&quot;COLOR: blue&quot;&gt;in&lt;/SPAN&gt; files)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fileListBox.Items.Add(filename);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;/SPAN&gt;&lt;br /&gt;
여기서도 저장소에 접근하기 위해서 IsolateStorageFile 을 이용하고 있으며, 파일 리스트를 얻어오기 위하여 &lt;SPAN style=&quot;FONT-WEIGHT: bold&quot;&gt;GetFileNames &lt;/SPAN&gt;메서드를 활용하였습니다.&lt;br /&gt;
&lt;br /&gt;&lt;/LI&gt;
&lt;LI&gt;fileListBox에 출력된 파일을 선택하였을때 contentTextBlock 에 내용을 출력하기 위하여 fileListBox의 SelectionChanged 이벤트 핸들러를 등록하고, 아래와 같은 코드를 추가하여 주십시오.&lt;br /&gt;
&lt;br /&gt;&lt;SPAN style=&quot;LINE-HEIGHT: 1em; FONT-FAMILY: nanumgothiccoding,consolas,courier-new&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;private&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; fileListBox_SelectionChanged(&lt;SPAN style=&quot;COLOR: blue&quot;&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;SelectionChangedEventArgs&lt;/SPAN&gt; e)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;if&lt;/SPAN&gt; (fileListBox.SelectedItem != &lt;SPAN style=&quot;COLOR: blue&quot;&gt;null&lt;/SPAN&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 선택된 파일을 읽어서 출력한다.&lt;/SPAN&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; selectedFilename = fileListBox.SelectedItem.ToString();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;if&lt;/SPAN&gt; (System.IO.&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;Path&lt;/SPAN&gt;.GetExtension(selectedFilename) == &lt;SPAN style=&quot;COLOR: rgb(163,21,21)&quot;&gt;&quot;.txt&quot;&lt;/SPAN&gt;)&lt;br /&gt;
&lt;FONT size=+0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt; appStorage = &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFile&lt;/SPAN&gt;.GetUserStoreForApplication();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;using&lt;/SPAN&gt; (&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;StreamReader&lt;/SPAN&gt; reader = &lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;StreamReader&lt;/SPAN&gt;(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;new&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;IsolatedStorageFileStream&lt;/SPAN&gt;(selectedFilename, &lt;SPAN style=&quot;COLOR: rgb(43,145,175)&quot;&gt;FileMode&lt;/SPAN&gt;.Open, appStorage)))&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;string&lt;/SPAN&gt; content = reader.ReadToEnd();&lt;br /&gt;
&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contentTextBlock.Text = content;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=+0&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/FONT&gt;&lt;/LI&gt;&lt;FONT size=+0&gt;
&lt;LI&gt;실행결과는 아래와 같습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/206ED51C4C89119B82&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F206ED51C4C89119B82&quot; width=&quot;221&quot; height=&quot;404&quot; alt=&quot;&quot; filename=&quot;2010-08-01 오전 1-45-04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/LI&gt;&lt;/FONT&gt;&lt;/OL&gt;&lt;FONT size=+0&gt;&lt;br /&gt;
부족한 부분은 샘플 프로젝트 파일을 첨부하니 참고하십시오.&lt;br /&gt;
&lt;/FONT&gt;
&lt;P&gt;&lt;div class=&quot;imageblock &quot; style=&quot;display:inline;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/cfile/tistory/140DE8044C544C3E6A&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;WebDownload.zip&lt;/a&gt;&lt;/div&gt;
&lt;/P&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;DIV style=&quot;BORDER-BOTTOM: rgb(254,222,199) 1px solid; BORDER-LEFT: rgb(254,222,199) 1px solid; PADDING-BOTTOM: 10px; BACKGROUND-COLOR: rgb(254,222,199); PADDING-LEFT: 10px; PADDING-RIGHT: 10px; BORDER-TOP: rgb(254,222,199) 1px solid; BORDER-RIGHT: rgb(254,222,199) 1px solid; PADDING-TOP: 10px&quot; class=txc-textbox&gt;격리된 저장소에 저장된 파일이나 디렉터리에 대한 정보를 가져오기 위한 FileInfo 클래스나 DirectoryInfo 클래스를 가져올 수 있는 방법이 없었습니다.&lt;br /&gt;
WP7 에서는 어플리케이션의 격리된 저장소와 공용 저장소 외에는 따로 접근할수가 없는듯 한데, 파일이나 디렉터리에 대한 정보를 가져올 수 없다는 점은 상당히 아쉬운 부분입니다.&lt;br /&gt;
&lt;/DIV&gt;&lt;br /&gt;

&lt;P&gt;&lt;FONT size=+0&gt;끝까지 읽어주셔서 감사합니다.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=+0&gt;즐거운 하루되십시오.&lt;/FONT&gt;&lt;/P&gt;</description>
      <category>Windows Phone 7</category>
      <category>isolated storage</category>
      <category>windows phone 7</category>
      <category>WP7</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/53</guid>
      <comments>https://whistle.tistory.com/entry/%EC%9B%B9%EC%97%90%EC%84%9C-Windows-Phone-7%EC%9D%98-%EA%B2%A9%EB%A6%AC%EB%90%9C-%EC%A0%80%EC%9E%A5%EC%86%8C%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C-%EB%B0%9B%EA%B8%B0#entry53comment</comments>
      <pubDate>Sun, 1 Aug 2010 01:12:54 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET 프로젝트에서 런타임에 참조된 어셈블리 불러오기</title>
      <link>https://whistle.tistory.com/entry/ASPNET-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-%EC%B0%B8%EC%A1%B0%EB%90%9C-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0</link>
      <description>&lt;p&gt;ASP.NET 프로젝트에서는 Visual Studio에서 참조된 어셈블리 외에도 bin 폴더에 포함된 모든 어셈블리를 참조된 어셈블리로 인식합니다.    &lt;br /&gt;외부에서 컴파일 된 어셈블리 또한 런타임에 bin폴더로 추가하여도 정상적으로 동작하게 됩니다.&lt;/p&gt;  &lt;p&gt;그렇다면, ASP.NET 프로젝트에서 참조된 모든 어셈블리의 목록을 어떻게 가져올 수 있을까요?    &lt;br /&gt;이는 System.Web.Compliation.BuildManager 클래스의 GetReferencedAssemblies 정적 메서드를 이용하여 알 수 있습니다.&lt;/p&gt;  &lt;p&gt;만일 참조된 어셈블리에 존재하는 WCF RIA Services의 DomainService의 하위 클래스의 목록을 가져오려 한다면 아래와 같은 코드를 이용할 수 있습니다.&lt;/p&gt;  &lt;div style=&quot;padding-bottom: 3px; line-height: 1.1em; padding-left: 3px; padding-right: 3px; font-family: nanumgothiccoding, consolas, courier new, malgun gothic; background: white; color: black; font-size: 9pt; padding-top: 3px&quot;&gt;   &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #2b91af&quot;&gt;Type&lt;/span&gt;&amp;gt; dictionary = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt;, &lt;span style=&quot;color: #2b91af&quot;&gt;Type&lt;/span&gt;&amp;gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;StringComparer&lt;/span&gt;.OrdinalIgnoreCase);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Type&lt;/span&gt; type = &lt;span style=&quot;color: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;DomainService&lt;/span&gt;);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;Assembly&lt;/span&gt; assembly &lt;span style=&quot;color: blue&quot;&gt;in&lt;/span&gt; &lt;strong&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;BuildManager&lt;/span&gt;.GetReferencedAssemblies().Cast&amp;lt;&lt;span style=&quot;color: #2b91af&quot;&gt;Assembly&lt;/span&gt;&amp;gt;()&lt;/strong&gt;)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;{&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: #2b91af&quot;&gt;Type&lt;/span&gt;[] exportedTypes = &lt;span style=&quot;color: blue&quot;&gt;null&lt;/span&gt;;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;try&lt;/span&gt;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exportedTypes = assembly.GetExportedTypes();&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;catch&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;ReflectionTypeLoadException&lt;/span&gt; exception)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; exportedTypes = exception.Types;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;catch&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;Exception&lt;/span&gt;)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;if&lt;/span&gt; (exportedTypes != &lt;span style=&quot;color: blue&quot;&gt;null&lt;/span&gt;)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;foreach&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;Type&lt;/span&gt; type2 &lt;span style=&quot;color: blue&quot;&gt;in&lt;/span&gt; exportedTypes)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;if&lt;/span&gt; ((!type2.IsAbstract &amp;amp;&amp;amp; !type2.IsInterface) &amp;amp;&amp;amp;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (!type2.IsValueType &amp;amp;&amp;amp; &lt;strong&gt;type.IsAssignableFrom(type2))&lt;/strong&gt; &amp;amp;&amp;amp;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;TypeDescriptor&lt;/span&gt;.GetAttributes(type2)[&lt;span style=&quot;color: blue&quot;&gt;typeof&lt;/span&gt;(&lt;span style=&quot;color: #2b91af&quot;&gt;EnableClientAccessAttribute&lt;/span&gt;)] != &lt;span style=&quot;color: blue&quot;&gt;null&lt;/span&gt;)&lt;/strong&gt;)&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; canonicalFileName = GetCanonicalFileName(type2);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dictionary[canonicalFileName] = type2;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;위 코드에서는 BuildManager.GetReferencedAssemblies 메서드를 통하여 참조로 등록된 어셈블리들을 가져오고,    &lt;br /&gt;Type.IsAssignableFrom(Type) 메서드를 이용하여 현재 타입이 DomainService를 상속받고 있는지를 확인합니다.     &lt;br /&gt;그리고, TypeDescriptor.GetAttributes 메서드를 이용하여 등록된 특성 중에 EnableClientAccess 가 있는지를 확인하게 됩니다.&lt;/p&gt;  &lt;p&gt;위와 같은 방식으로 BuildManager 클래스와 리플렉션을 이용하여 런타임에 참조된 어셈블리를 불러와서 다양한 활용이 가능해집니다.&lt;/p&gt;</description>
      <category>ASP.NET</category>
      <category>ASP.NET</category>
      <category>reflection</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/52</guid>
      <comments>https://whistle.tistory.com/entry/ASPNET-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EC%97%90%EC%84%9C-%EC%B0%B8%EC%A1%B0%EB%90%9C-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0#entry52comment</comments>
      <pubDate>Wed, 31 Mar 2010 23:38:32 +0900</pubDate>
    </item>
    <item>
      <title>C#으로 Acrobat(PDF) 문서를 이미지로 변환하기</title>
      <link>https://whistle.tistory.com/entry/C%EC%9C%BC%EB%A1%9C-AcrobatPDF-%EB%AC%B8%EC%84%9C%EB%A5%BC-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;PDF 문서는 상당히 강력한 기능을 제공하지만, 많은 내용이 담긴 문서의 경우에는 그 용량 또한 무지하지 못할 정도로 커지게 되므로, 웹 상에서 배포할 할 때는 파일이 클라이언트로 모두 다운로드될 때 까지 대기 해야만 합니다.&lt;/p&gt;
&lt;p&gt;구글도서나 YES24와 같은 사이트에는 즉시 응답성을 위해서 이미지 포맷을 이용하여 미리보기를 제공하여 즉시 응답성을 높이고 있는데요. 그래서 PDF 문서를 이미지로 변환하여 웹 상에서 제공할 수 있지 않을까 하고 생각해 보았습니다.&lt;/p&gt;
&lt;p&gt;이미지로 변환하는 기능은 Acrobat에서 제공하고 있으므로, C#에서도 Acrobat의 기능을 이용하여 PDF를 이미지로 변경하는 것이 가능합니다. &lt;br /&gt;
이미지로 변환하기 위해서는 우선 Adobe Acrobat이 설치되어 있어야 합니다. &lt;br /&gt;
애석하게도 Acrobat Reader는 Acrobat관련 인터페이스를 인스턴스화 할 수 있는 COM 인터페이스를 노출하지 않으므로, 사용할 수 가 없습니다.&lt;/p&gt;
&lt;p&gt;이미지 변환을 위해서 우선 프로젝트에 Acrobat Type Library를 COM 항목에서 참조로 추가합니다.&lt;br /&gt;
아래와 같이 Acrobat&amp;nbsp;또는 Adobe Acrobat Type Library를 참조로 추가하여 주세요.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/1644D6044B7FE1F0C5&quot; height=&quot;316&quot; /&gt;&lt;/p&gt;
&lt;p&gt;그리고, 변환을 하는 코드는 아래와 같습니다.&lt;/p&gt;
&lt;div style=&quot;padding: 5px; line-height: 1.2em; font-family: nanumgothiccoding,consolas,malgun gothic,courier new; background: none repeat scroll 0% 0% white; color: black; font-size: 9pt;&quot;&gt;&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 아크로벳 문서­ 객체를 생성하고, 지정한 파일명의 PDF 문서­를 읽어들입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPDDoc&lt;/span&gt; pdfDoc = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPDDoc&lt;/span&gt;();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;bool&lt;/span&gt; ret = pdfDoc.Open(fileName);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (ret == &lt;span style=&quot;color: blue;&quot;&gt;false&lt;/span&gt;)&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;throw&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;FileNotFoundException&lt;/span&gt;();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 아크로벳 문서­의 전체 페이지 수를 가져옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; totalPage = pdfDoc.GetNumPages();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;int&lt;/span&gt; currentPage = 0;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 문서­에서­ 지정한 번호의 페이지를 아크로벳 페이지 객체로 받아옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPDPage&lt;/span&gt; pdfPage = (Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPDPage)&lt;/span&gt;pdfDoc.AcquirePage(currentPage);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 이미지로 만들기 위한 영역을 지정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPoint&lt;/span&gt; pdfSize = (Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroPoint&lt;/span&gt;)pdfPage.GetSize();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroRect&lt;/span&gt; pdfRect = &lt;span style=&quot;color: blue;&quot;&gt;new&lt;/span&gt; Acrobat.&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;AcroRect&lt;/span&gt;();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;pdfRect.Left = 0;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;pdfRect.right = pdfSize.x;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;pdfRect.Top = 0;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;pdfRect.bottom = pdfSize.y;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 페이지의 지정된 영역을 100% 크기로 클립보드에 이미지 형태로 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;pdfPage.CopyToClipboard(pdfRect, 0, 0, 100);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: green;&quot;&gt;// 클립보드에 저장된 이미지를 파일로 저장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;IDataObject&lt;/span&gt; clipboardData = &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Clipboard&lt;/span&gt;.GetDataObject();&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;if&lt;/span&gt; (clipboardData.GetDataPresent(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataFormats&lt;/span&gt;.Bitmap))&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;{&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Bitmap&lt;/span&gt; pdfBitmap = (&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;Bitmap&lt;/span&gt;)clipboardData.GetData(&lt;span style=&quot;color: rgb(43, 145, 175);&quot;&gt;DataFormats&lt;/span&gt;.Bitmap);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pdfBitmap.Save(&lt;span style=&quot;color: rgb(163, 21, 21);&quot;&gt;&quot;1.jpg&quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style=&quot;margin: 0px;&quot;&gt;}&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;문제가 발생 시에는 댓글을 남겨주세요.&lt;/p&gt;</description>
      <category>C#</category>
      <category>C#</category>
      <category>PDF</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/51</guid>
      <comments>https://whistle.tistory.com/entry/C%EC%9C%BC%EB%A1%9C-AcrobatPDF-%EB%AC%B8%EC%84%9C%EB%A5%BC-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0#entry51comment</comments>
      <pubDate>Sat, 20 Feb 2010 22:20:00 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET MVC 에서 사용자 정의 컨트롤의 내용을 문자열로 받기</title>
      <link>https://whistle.tistory.com/entry/ASPNET-MVC-%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%9D%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C-%EB%B0%9B%EA%B8%B0</link>
      <description>&lt;p&gt;간혹 사용자 정의 컨트롤(.ascx) 파일에서 처리한 내용을 Page에 바로 출력하는 것이 아니라, 문자열로 받아야 할 경우가 있습니다.    &lt;br /&gt;ASP.NET 웹 폼의 경우에는 Page.LoadControl() 과 Control.RenderControl() 메서드를 이용하여 아래와 같은 코드로 사용자 정의 컨트롤이 처리한 내용을 문자열로 받아올 수 있습니다.&lt;/p&gt;  &lt;div style=&quot;font-family: consolas, courier new, malgun gothic; background: white; color: black; font-size: 9pt&quot;&gt;   &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;Control&lt;/span&gt; control = LoadControl(&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;~/MailTemplate.ascx&amp;quot;&lt;/span&gt;);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;((&lt;span style=&quot;color: #2b91af&quot;&gt;MailTemplate&lt;/span&gt;)control).DestinationName = &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;Whistle&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;StringBuilder&lt;/span&gt; stringBuilder = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;StringBuilder&lt;/span&gt;();&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;StringWriter&lt;/span&gt; sw = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;StringWriter&lt;/span&gt;(stringBuilder))&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;{&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;HtmlTextWriter&lt;/span&gt; tw = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;HtmlTextWriter&lt;/span&gt;(sw))&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; control.RenderControl(tw);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;}&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; messageContent = stringBuilder.ToString();&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;ASP.NET 웹 폼은 자체가 Page 클래스를 상속받으므로, TemplateControl.LoadControl() 메서드를 사용할 수 있으므로, 사용자 정의 컨트롤을 로드하고 HtmlTextWriter를 이용하여 컨트롤의 실행된 내용을 문자열로 받아 올 수 있습니다.&lt;/p&gt;  &lt;p&gt;ASP.NET MVC는 사용자 정의 컨트롤이 ViewUserContol을 상속받게 되며, MVC Controller는 자체적으로 ViewUserControl에 대한 LoadControl을 제공하지 않습니다,    &lt;br /&gt;ViewUserControl 클래스의 인스턴스를 생성은 ViewPage 클래스의 인스턴스 상에서만 가능합니다.&lt;/p&gt;  &lt;p&gt;즉, MVC에서 사용자 정의 컨트롤이 생성하는 HTML을 문자열로 받기 위해서는, 가상의 ViewPage의 인스턴스를 생성하고, 그 ViewPage를 기반으로 사용자 정의 컨트롤을 생성한 후 ASP.NET 웹 폼에서와 같은 방법으로 문자열을 받아 올 수 있습니다.&lt;/p&gt;  &lt;div style=&quot;font-family: consolas, courier new, malgun gothic; background: white; color: black; font-size: 9pt&quot;&gt;   &lt;p style=&quot;margin: 0px&quot;&gt;ViewData[&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;UserName&amp;quot;&lt;/span&gt;] = &lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;Whistle&amp;quot;&lt;/span&gt;;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;ViewPage&lt;/span&gt; viewPage = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;ViewPage&lt;/span&gt;() { ViewContext = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;ViewContext&lt;/span&gt;() };&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;viewPage.ViewData = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;ViewDataDictionary&lt;/span&gt;(ViewData);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;viewPage.Controls.Add(viewPage.LoadControl(&lt;span style=&quot;color: #a31515&quot;&gt;&amp;quot;~/Views/Shared/MailTemplate.ascx&amp;quot;&lt;/span&gt;));&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: #2b91af&quot;&gt;StringBuilder&lt;/span&gt; sb = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;StringBuilder&lt;/span&gt;();&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;StringWriter&lt;/span&gt; sw = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;StringWriter&lt;/span&gt;(sb))&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;{&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style=&quot;color: blue&quot;&gt;using&lt;/span&gt; (&lt;span style=&quot;color: #2b91af&quot;&gt;HtmlTextWriter&lt;/span&gt; tw = &lt;span style=&quot;color: blue&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #2b91af&quot;&gt;HtmlTextWriter&lt;/span&gt;(sw))&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; viewPage.RenderControl(tw);&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;}&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&amp;#160;&lt;/p&gt;    &lt;p style=&quot;margin: 0px&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;string&lt;/span&gt; message = sb.ToString();&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;위와 같은 형식으로 MVC에서도 사용자 정의 컨트롤의 출력 내용을 문자열로 받아와서 처리가 가능합니다.&lt;/p&gt;</description>
      <category>ASP.NET</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/50</guid>
      <comments>https://whistle.tistory.com/entry/ASPNET-MVC-%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%EC%BB%A8%ED%8A%B8%EB%A1%A4%EC%9D%98-%EB%82%B4%EC%9A%A9%EC%9D%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C-%EB%B0%9B%EA%B8%B0#entry50comment</comments>
      <pubDate>Thu, 14 Jan 2010 13:12:19 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio 2010 Beta 2 에서 Code Coverage 사용하기</title>
      <link>https://whistle.tistory.com/entry/Visual-Studio-2010-Beta-2-%EC%97%90%EC%84%9C-Code-Coverage-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
      <description>Visual Studio 2010 Beta 2 에서는 UnitTest에 대한 Code Coverage 활성화하는 설정방법이 변경되었습니다.&lt;br /&gt;
Visual Studio 2008에서의 Test Setting 과 Visual Studio 2010에서의 Test Setting이 달라서 한동안 애를 먹었는데요.&lt;br /&gt;
&lt;br /&gt;
Visual Studio 2010 Beta 2에서 Code Coverage 를 사용하기 위한 방법은 아래와 같습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot;&gt;
&lt;li&gt;테스트 프로젝트가 포함된 솔루션에서 Solution Items 폴더 아래에 존재하는 &lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;Local.testsettings&lt;/span&gt; 파일을 더블 클릭하여 엽니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/161B8E1F4B453B0248&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F161B8E1F4B453B0248&quot; width=&quot;529&quot; height=&quot;389&quot; alt=&quot;&quot; filename=&quot;codecoverage_01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;Data and Diagnostics&lt;/span&gt; 항목을 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;Code Coverage&lt;/span&gt; 항목의 Enabled 를 체크합니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/15742A234B453C404D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F15742A234B453C404D&quot; width=&quot;528&quot; height=&quot;389&quot; alt=&quot;&quot; filename=&quot;codecoverage_02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;Configure 버튼&lt;/span&gt;을 클릭하면, Code Coverage Detail 창이 뜹니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/151E34214B453CD85B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F151E34214B453CD85B&quot; width=&quot;526&quot; height=&quot;361&quot; alt=&quot;&quot; filename=&quot;codecoverage_03.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Code Coverage 대상이 될 &lt;span style=&quot;color: rgb(227, 22, 0); font-weight: bold;&quot;&gt;어셈블리를 선택&lt;/span&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
유닛테스트 실행 후 Code Coverage Results 창을 통해 Code Coverage 정보를 확인 할 수 있습니다.&lt;br /&gt;
&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/131E23214B453D9D56&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F131E23214B453D9D56&quot; width=&quot;501&quot; height=&quot;188&quot; alt=&quot;&quot; filename=&quot;codecoverage_04.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;br /&gt;</description>
      <category>Visual Studio</category>
      <category>Code Coverage</category>
      <category>unittest</category>
      <category>Visual Studio 2010</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/49</guid>
      <comments>https://whistle.tistory.com/entry/Visual-Studio-2010-Beta-2-%EC%97%90%EC%84%9C-Code-Coverage-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry49comment</comments>
      <pubDate>Thu, 7 Jan 2010 10:50:12 +0900</pubDate>
    </item>
    <item>
      <title>메서드를 호출한 어셈블리 정보 가져오기</title>
      <link>https://whistle.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC-%ED%98%B8%EC%B6%9C%ED%95%9C-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
      <description>&lt;P&gt;때때로 작성한 메서드를 과연 어디서 호출하는지 알고 싶을 때가 있습니다. &lt;br /&gt;
동일한 어셈블리 내에서의 호출일 수 도 있겠지만, public으로 노출된 메서드라면 현재 어셈블리 외의 외부에서도 호출이 가능합니다.&lt;/P&gt;
&lt;P&gt;이럴 때 현재 메서드를 어느 어셈블리에서 호출하였는지를 알 수 있는 방법이 있습니다. &lt;br /&gt;
이미 알고 계시는지는 모르겠지만, &lt;FONT color=#e31600&gt;Assembly&lt;/FONT&gt; 클래스의 정적메서드인 &lt;FONT color=#e31600&gt;GetCallingAssembly&lt;/FONT&gt; 메서드가 이 방법을 제공하고 있습니다.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_more&quot; id=&quot;more48_0&quot; data-id=&quot;48_0&quot;&gt;더보기&lt;/button&gt;&lt;div class=&quot;moreless_content&quot; id=&quot;content48_0&quot; style=&quot;display: none;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less48_0&quot; data-id=&quot;48_0&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;
  &lt;p class=&quot;txt_view&quot;&gt;
&lt;P&gt;아래와 같이 솔루션이 구성되어 있을 때&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/18466F254AE0511E95&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F18466F254AE0511E95&quot; width=&quot;278&quot; height=&quot;208&quot; alt=&quot;&quot; filename=&quot;GetCallingAssembly_01.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;/P&gt;
&lt;P&gt;MethodCallAssembly 프로젝트에서 CalledAssembly의 CalledClass내의 메서드를 호출한다고 할 때,&lt;/P&gt;
&lt;DIV style=&quot;FONT-FAMILY: consolas, courier new, malgun gothic; BACKGROUND: white; COLOR: black; FONT-SIZE: 9pt&quot;&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;class&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;CalledClass&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;{&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: blue&quot;&gt;void&lt;/SPAN&gt; CalledMethod()&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 현재 메서드를 호출한 어셈블리 정보를 가져옵니다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/SPAN&gt; assembly = System.Reflection.&lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Assembly&lt;/SPAN&gt;.GetCallingAssembly();&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: green&quot;&gt;// 어셈블리의 정보를 출력합니다.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;FullName: &quot;&lt;/SPAN&gt; + assembly.FullName);&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;CodeBase: &quot;&lt;/SPAN&gt; + assembly.CodeBase);&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;Location: &quot;&lt;/SPAN&gt; + assembly.Location);&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;GAC: &quot;&lt;/SPAN&gt; + assembly.GlobalAssemblyCache.ToString());&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style=&quot;COLOR: #2b91af&quot;&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style=&quot;COLOR: #a31515&quot;&gt;&quot;Runtime Version: &quot;&lt;/SPAN&gt; + assembly.ImageRuntimeVersion.ToString());&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style=&quot;MARGIN: 0px&quot;&gt;}&lt;/P&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;위와 같은 코드를 이용하면 호출한 어셈블리의 정보를 얻어 올 수 있으며, &lt;br /&gt;
Assembly 클래스의 인스턴스를 얻을 수 있으므로 Reflection을 이용한 핸들링이 가능해집니다.&lt;/P&gt;
&lt;P&gt;결과는 아래와 같이 출력됩니다.&lt;/P&gt;
&lt;P&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/19466F254AE0511E96&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F19466F254AE0511E96&quot; width=&quot;575&quot; height=&quot;375&quot; alt=&quot;&quot; filename=&quot;GetCallingAssembly_02.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/div&gt;
&lt;/P&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;button type=&quot;button&quot; class=&quot;btn_less&quot; id=&quot;less48_0&quot; data-id=&quot;48_0&quot;&gt;&lt;span class=&quot;txt_fold&quot;&gt;접기&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;</description>
      <category>C#</category>
      <category>assembly</category>
      <category>reflection</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/48</guid>
      <comments>https://whistle.tistory.com/entry/%EB%A9%94%EC%84%9C%EB%93%9C%EB%A5%BC-%ED%98%B8%EC%B6%9C%ED%95%9C-%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#entry48comment</comments>
      <pubDate>Thu, 22 Oct 2009 21:35:37 +0900</pubDate>
    </item>
    <item>
      <title>Vista에서 사용자 폴더 안에 내가 필요한 폴더를 등록하기</title>
      <link>https://whistle.tistory.com/entry/Vista%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%8F%B4%EB%8D%94-%EC%95%88%EC%97%90-%EB%82%B4%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%ED%8F%B4%EB%8D%94%EB%A5%BC-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;Vista에서 사용자 폴더에 등록된 폴더 중 문서, 다운로드, 음악, 비디오 등 기본적으로 제공하는 폴더외의 내가 정한 폴더를 등록하고 싶은 경우가 있습니다.   &lt;br /&gt;이때 사용자 폴더 내에 새로운 폴더를 하나 만들어서 사용하면 되지만, 문서나 기타 다른 폴더들의 위치도 다른 드라이브로 옮겨서 사용하는데, 폴더내에 새로운 폴더를 생성한다는 꺼름직하죠.&lt;/p&gt;  &lt;p&gt;그때 사용할 수 있는 것이 링크폴더를 만드는 것인데요.   &lt;br /&gt;Vista에서는 &lt;strong&gt;mklink&lt;/strong&gt;라는 명령어를 제공하여 &lt;font color=&quot;#ff0000&quot;&gt;심볼릭 링크를 생성&lt;/font&gt;할 수 있도록 해줍니다.&lt;/p&gt;  &lt;p&gt;mklink의 사용법입니다.   &lt;br /&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs7/31_10_2_34_blog29469_attach_0_0.png?original&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;325&quot; alt=&quot;mklink 사용방법&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs7/31_10_2_34_blog29469_attach_0_1.png?original&quot; width=&quot;500&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;저는 D:\Projects라는 폴더를 사용자 폴더(C:\Users\Hwikyeom)내에 프로젝트라는 이름으로 링크폴더를 만들려고 합니다.&amp;#160; &lt;br /&gt;이때 링크폴더는 사용자 폴더내에 동일한 이름의 폴더가 존재하지 않아야 합니다.    &lt;br /&gt;만일 이미 C:\Users\Hwikyeom\프로젝트 라는&amp;#160; 폴더가 만들어져 있다면 &lt;em&gt;&amp;quot;파일이 이미 있으므로 만들 수 없습니다.&amp;quot;&lt;/em&gt; 라는 메시지가 나옵니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs9/31_10_2_34_blog29469_attach_0_0.png?original&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;325&quot; alt=&quot;mklink 명령 실행&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs7/31_10_2_34_blog29469_attach_0_2.png?original&quot; width=&quot;500&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;기호화된 링크가 만들어 졌습니다.&amp;quot;&lt;/em&gt;라는 메시지가 나왔다면, 링크폴더가 정상적으로 만들어 졌습니다.    &lt;br /&gt;탐색기에서 확인을 해보면&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs9/31_10_2_34_blog29469_attach_0_1.png?original&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;393&quot; alt=&quot;생성결과&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs7/31_10_2_34_blog29469_attach_0_3.png?original&quot; width=&quot;274&quot; align=&quot;left&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;결과를 보면 탐색기의 트리뷰에서 프로젝트라는 폴더를 확인 할 수 있습니다.    &lt;br /&gt;그리고, 해당 폴더를 선택하면 위의 주소표시줄과 같이 D:\Project로 표시되는 것이 아니라 사용자폴더내의 프로젝트로 표시가 됨을 보실 수 있습니다.    &lt;br /&gt;하지만, 실제 내용은 D:\Projects 폴더의 내용을 표시하는 것이죠.&lt;/p&gt;  &lt;p&gt;그렇다면, 폴더바로가기를 생성하였을 때와는 어떻게 다를까요?&lt;/p&gt;  &lt;p&gt;폴더 바로가기는 LNK라는 파일을 생성하여 실행시 지정된 폴더로 이동시켜 주는 것입니다.   &lt;br /&gt;즉, 바로가기는 파일이므로 옆의 링크폴더와는 달리 트리뷰에 출력될 수 없습니다.    &lt;br /&gt;그리고, 바로가기를 실행했을 때는 주소 표시줄이     &lt;br /&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs9/31_10_2_34_blog29469_attach_0_2.png?original&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;32&quot; alt=&quot;captured_Image.png[16]&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs8/31_10_2_34_blog29469_attach_0_0.png?original&quot; width=&quot;219&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;와 같이 지정된 폴더가 출력됩니다.&lt;/p&gt;  &lt;p&gt;mklink는 폴더 뿐만이 아니라 파일에 대한 심볼릭링크의 생성도 가능하며, 옵션에 따라 하드링크나 또는 디렉터리 교차점의 생성도 가능합니다.&lt;/p&gt;  &lt;p&gt;Vista 이전 버전에서는 linkd.exe를 이용하는 방법으로 링크폴더의 생성이 가능합니다. 이 방법에 대한 자세한 내용은 &lt;a href=&quot;http://qaos.com/article.php?sid=2638&quot;&gt;http://qaos.com/article.php?sid=2638&lt;/a&gt; 를 참고하세요.&lt;/p&gt;  &lt;p&gt;그리고, 파일기반 심볼 링크에 대한 부분을 찾아서 참조합니다.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;파일 기반 심볼 링크&lt;/p&gt;    &lt;p&gt;Windows Vista의 I/O 관련 변경 사항으로는 파일 기반 심볼 링크, 보다 효율적인 I/O 완료 처리, 포괄적인 I/O 취소 지원, 우선 순위가 부여된 I/O 등이 있습니다.&lt;/p&gt;    &lt;p&gt;많 은 사용자들이 NTFS에서 누락되었다고 생각하는 파일 시스템 기능인 심볼 파일 링크(UNIX에서는 소프트 링크라고 함)가 마침내 Windows Vista에 포함되었습니다. Windows 2000 버전의 NTFS에서는 다른 디렉터리를 가리키는 디렉터리를 만들 수 있게 해 주는 디렉터리 교차점이라는 심볼 디렉터리 링크가 사용되었지만 Windows Vista 이전 버전의 NTFS에서는 파일의 하드 링크만 지원했습니다.&lt;/p&gt;    &lt;p&gt;Windows 에서 심볼 링크와 디렉터리 교차점을 해결하는 방식의 가장 큰 차이점은 처리가 발생하는 위치입니다. Windows에서 심볼 링크는 원격 파일 서버에 있는 위치를 참조할 때조차 로컬 시스템에서 처리됩니다. Windows에서는 원격 파일 서버를 참조하는 디렉터리 교차점을 해당 서버 내에서 처리합니다. 따라서 서버에 있는 심볼 링크는 다른 클라이언트 볼륨과 같이 클라이언트에서만 액세스할 수 있는 위치를 참조할 수 있지만 디렉터리 교차점은 참조할 수 없습니다. 이 문제를 해결하기 위해 Windows Vista에서는 파일과 디렉터리 모두에 대해 새로운 심볼 링크 유형을 지원합니다.&lt;/p&gt;    &lt;p&gt;심 볼 링크에 내포된 의미를 이해할 수 있도록 다양한 파일 시스템 명령이 업데이트되었습니다. 예를 들어 Delete 명령은 링크를 따르는 대신 링크를 삭제하도록 업데이트되었습니다(링크를 따르면 대상이 삭제됨). 그러나 일부 응용 프로그램에서는 심볼 링크를 올바르게 처리할 수 없으므로 심볼 링크를 만들려면 기본적으로 관리자에게만 부여되는 새로운 심볼 링크 만들기 권한이 있어야 합니다.&lt;/p&gt;    &lt;p&gt;Mklink 명령으로 명령 프롬프트에서 심볼 링크를 만들 수 있습니다. 명령 프롬프트에서 기본으로 제공하는 디렉터리 명령은 &amp;lt;SYMLINK&amp;gt;로 플래그를 지정하고 대상을 괄호 안에 표시하여 심볼 링크를 식별합니다(&lt;strong&gt;그림 5&lt;/strong&gt; 참조). 심볼 링크는 Windows 탐색기에서도 확인할 수 있으며 바로 가기 화살표로 표시됩니다. 찾기 창에 링크 대상 열을 추가하여 탐색기에서 링크의 대상을 볼 수 있습니다.&lt;/p&gt;    &lt;p&gt;원본경로 : &lt;a title=&quot;http://technet.microsoft.com/ko-kr/magazine/cc162494.aspx&quot; href=&quot;http://technet.microsoft.com/ko-kr/magazine/cc162494.aspx&quot;&gt;http://technet.microsoft.com/ko-kr/magazine/cc162494.aspx&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
      <category>기타</category>
      <category>tip</category>
      <category>Vista</category>
      <category>Windows</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/44</guid>
      <comments>https://whistle.tistory.com/entry/Vista%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%8F%B4%EB%8D%94-%EC%95%88%EC%97%90-%EB%82%B4%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%ED%8F%B4%EB%8D%94%EB%A5%BC-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0#entry44comment</comments>
      <pubDate>Wed, 10 Sep 2008 14:08:04 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET Generated Image 컨트롤</title>
      <link>https://whistle.tistory.com/entry/ASPNET-Generated-Image-%EC%BB%A8%ED%8A%B8%EB%A1%A4</link>
      <description>&lt;p&gt;얼마 전 한 신입사원이 데이터베이스에 저장되어 있는 BLOB형태의 이미지 파일을 ASP.NET 웹페이지로 출력하기 위해서, 데이터베이스에서 byte배열을 얻어서 하드디스크에 GUID형태의 이름을 가지는 이미지로 저장한 다음 그 파일을 출력하고, 이미지를 생성할때 마다 파일이 생성될 폴더에 파일 중 생성시간이 하루 이상 지난파일을 삭제하는 로직으로 짜고 있는것을 본적이 있었습니다.&lt;/p&gt;  &lt;p&gt;검색엔진에 검색 한번으로 엄청난 양의 레퍼런스 코드가 쏟아져 나올텐데도, 자기 나름대로 계획을 세우고 꿋꿋하게 그걸 구현해 나가는 모습을 보고 얘한테 뭐라고해야하나 말아야하나 고민을 했었더랬습니다.&lt;/p&gt;  &lt;p&gt;당시에는 핸들러파일(ashx)파일에서 이미지를 출력하도록하는 방법을 알려주고 끝냈었는데, 오늘 보니 Micorosft에서 ASP.NET Generated Image 라는 상당히 유용해 보이는 컨트롤을 내놓았네요.&lt;/p&gt;  &lt;p&gt;서버 컨트롤형태로 구현되어 있고, 각 용도별 구현을 위해서 ImageHandler를 상속받는 ashx 핸들러 파일을 생성하여 컨트롤에 지정하도록 하고 있습니다.   &lt;br /&gt;즉, 이미지관련 처리를 위한 라이브러리를 제공하고 그 라이브러리를 이용해서 실제 이미지를 그리는 부분은 사용자에게 맡기는 형태입니다.&lt;/p&gt;  &lt;p&gt;예제를 한번 보자면, 페이지에 컨트롤을 올리면   &lt;br /&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs8/24_10_2_34_blog29469_attach_0_0.png?original&quot;&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;76&quot; alt=&quot;captured_Image.png&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs7/24_10_2_34_blog29469_attach_0_0.png?original&quot; width=&quot;221&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;디자인뷰 코드상에서 보면&lt;/p&gt;  &lt;div&gt;   &lt;div style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;     &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;cc1:GeneratedImage&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;ID&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;GeneratedImage1&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;runat&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;    &lt;span style=&quot;color: #ff0000&quot;&gt;ImageHandlerUrl&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;~/ImageHandler1.ashx&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Parameters&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;      &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;cc1:ImageParameter&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Name&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;Msg&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #ff0000&quot;&gt;Value&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;=&amp;quot;Welcome To CodeDigest&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;      &lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;Parameters&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span style=&quot;color: #800000&quot;&gt;cc1:GeneratedImage&lt;/span&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div&gt;이미지를 처리할 대상을 ImageHandler1.ashx 로 설정하였습니다.
  &lt;br /&gt;즉, 이미지 출력에 관한 모든 것은 ImageHandler1.ashx가 처리하는 것입니다.

  &lt;br /&gt;ImageHandler1.ashx는 아래와 같습니다.

  &lt;br /&gt;&lt;/div&gt;

&lt;div&gt;
  &lt;div style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;
    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&amp;lt;%@ WebHandler Language=&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;C#&amp;quot;&lt;/span&gt; Class=&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;ImageHandler1&amp;quot;&lt;/span&gt; %&amp;gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Collections.Specialized;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Drawing;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; Microsoft.Web;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;&amp;#160;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; ImageHandler1 : ImageHandler {&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;    &lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; ImageHandler1() {&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// Set caching settings and add image transformations here       &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;       }&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;    &lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; ImageInfo GenerateImage(NameValueCollection parameters) {&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// Add image generation logic here and return an instance of ImageInfo&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;        Bitmap bit = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Bitmap(500, 500);&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;        Graphics gra = Graphics.FromImage(bit);&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;        gra.Clear(Color.AliceBlue);&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;        gra.DrawString(parameters[&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Msg&amp;quot;&lt;/span&gt;], &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Font(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;Verdana&amp;quot;&lt;/span&gt;, 16), Brushes.Black,0 , 150);&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;this&lt;/span&gt;.ImageTransforms.Add(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; WaterMark());&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; ImageInfo(bit);&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none&quot;&gt;    }&lt;/pre&gt;

    &lt;pre style=&quot;padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none&quot;&gt;}&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;위 코드는 새로운 Bitmap을 생성하서 그 안에 매개변수로 넘어온 메시지를 드로잉하여 반환합니다.
  &lt;br /&gt;그러므로, 이 예제의 결과는 아래와 같습니다.&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs7/24_10_2_34_blog29469_attach_0_1.png?original&quot;&gt;
    &lt;br /&gt;&lt;img style=&quot;border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px&quot; height=&quot;486&quot; alt=&quot;captured_Image.png[5]&quot; src=&quot;https://t1.daumcdn.net/tistoryfile/fs8/24_10_2_34_blog29469_attach_0_1.png?original&quot; width=&quot;393&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;하지만, 지정한 핸들러파일의 GenerateImage메서드의 구현에 따라서 이미지는 어떠한 형태로도 출력이 가능해 집니다.
  &lt;br /&gt;DB에서 이미지를 불러와서 출력하는 것도 가능하고, 이미지의 리사이즈 및 이미지에 워터마크를 넣고, 테두리를 입히는 작업등 구현에 따라 다른 형태의 이미지를 출력할 수 있을것입니다.&lt;/p&gt;

&lt;p&gt;컨트롤의 다운로드는 &lt;a href=&quot;http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=16449&quot; target=&quot;_blank&quot;&gt;여기&lt;/a&gt;서 가능하시고, .NET Framework 3.5 SP1이 적용되어야 사용이 가능합니다.&lt;/p&gt;

&lt;p&gt;좀더 자세한 내용 및 관련 예제은 다음 글 에서 확인이 가능합니다.
  &lt;br /&gt;&lt;a href=&quot;http://www.codedigest.com/Articles/ASPNET/119_New_Image_Generator_control_in_ASPNet_35.aspx&quot; target=&quot;_blank&quot;&gt;New Image Generator control in ASP.Net 3.5&lt;/a&gt;&lt;/p&gt;</description>
      <category>ASP.NET</category>
      <category>ASP.NET</category>
      <category>image</category>
      <category>Server Control</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/43</guid>
      <comments>https://whistle.tistory.com/entry/ASPNET-Generated-Image-%EC%BB%A8%ED%8A%B8%EB%A1%A4#entry43comment</comments>
      <pubDate>Fri, 5 Sep 2008 10:08:33 +0900</pubDate>
    </item>
    <item>
      <title>운영체제에 등록되지 않은 폰트 사용하기</title>
      <link>https://whistle.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%97%90-%EB%93%B1%EB%A1%9D%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%ED%8F%B0%ED%8A%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0</link>
      <description>&lt;P&gt;응용 프로그램을 작성하다 보면 운영체제의 기본폰트로 등록되지 않은 폰트를 사용해야 할 경우가 있습니다. 이 경우 보통은 설치프로그램에서 폰트를 운영체제에 등록하여 사용하죠. &lt;br /&gt;하지만, 시스템상에 폰트를 많이 설치하면 그만큼 시스템이 평소에 로드하고 있어야 하는 폰트가 많아 지므로 시스템이 느려지게 될 것이고, 자주 사용하지 않는 폰트파일이라면 굿이 등록시켜 사용할 필요가 없습니다.&lt;/P&gt;
&lt;P&gt;그렇다면, 폰트파일을 운영체제에 등록하지 않고, 필요 할때만 잠시 로드하여 사용하면 좋겠죠? &lt;br /&gt;이 부분을 지원을 지원하기 위해서 &lt;FONT face=Corbel&gt;.NET Framework&lt;/FONT&gt; 에서는&amp;nbsp; &lt;FONT face=Consolas color=#666666&gt;&lt;A href=&quot;http://msdn.microsoft.com/ko-kr/system.drawing.text.privatefontcollection.aspx&quot; target=_blank&gt;System.Drawing.Text.PrivateFontCollection&lt;/A&gt;&lt;/FONT&gt; 클래스를 제공하고 있습니다.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Consolas&gt;PrivateFontCollection&lt;/FONT&gt; 클래스는 운영체제에 등록된 폰트가 아닌 같은 이름의 개인 버전 폰트를 사용할 수 있도록 해주고, 운영체제에 등록되지 않은 글꼴을 임시로 설치해서 사용할 수 있도록 해줍니다.&lt;/P&gt;
&lt;P&gt;다음은 운영체제에 등록되지 않은 &lt;FONT face=&quot;Courier New&quot;&gt;&lt;STRONG&gt;3of9_new.ttf&lt;/STRONG&gt;&lt;/FONT&gt; 라는 바코드 폰트를 이용해서 &lt;FONT face=Consolas&gt;Label&lt;/FONT&gt;에 바코드를 출력하는 예제입니다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;https://t1.daumcdn.net/tistoryfile/fs8/18_10_2_34_blog29469_attach_0_0.png?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/tistoryfile/fs9/18_10_2_34_blog29469_attach_0_0.png?original&quot; height=&quot;246&quot; /&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;솔루션내에 &lt;FONT face=&quot;Courier New&quot;&gt;&lt;STRONG&gt;3of9_new.ttf&lt;/STRONG&gt;&lt;/FONT&gt; 가 포함되어 있으며 &lt;FONT color=#000080&gt;출력 디렉토리로 복사&lt;/FONT&gt; 속성이 &lt;FONT color=#000080&gt;항상 복사&lt;/FONT&gt;로 설정되어 있습니다. &lt;br /&gt;코드를 보면&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   1:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/SPAN&gt; System.Data;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   2:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/SPAN&gt; System.Drawing;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   3:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/SPAN&gt; System.Linq;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   4:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/SPAN&gt; System.Text;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   5:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;using&lt;/SPAN&gt; System.Windows.Forms;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   6:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   7:&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;namespace&lt;/SPAN&gt; UsePrivateFont&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   8:&lt;/SPAN&gt; {&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;   9:&lt;/SPAN&gt;     &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;partial&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;class&lt;/SPAN&gt; Form1 : Form&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  10:&lt;/SPAN&gt;     {&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  11:&lt;/SPAN&gt;         &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;public&lt;/SPAN&gt; Form1()&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  12:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  13:&lt;/SPAN&gt;             InitializeComponent();&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  14:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  15:&lt;/SPAN&gt;&amp;nbsp; &lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  16:&lt;/SPAN&gt;         &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;private&lt;/SPAN&gt; &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;void&lt;/SPAN&gt; Form1_Load(&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  17:&lt;/SPAN&gt;         {&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  18:&lt;/SPAN&gt;             System.Drawing.Text.PrivateFontCollection privateFonts = &lt;br /&gt;&lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;                      new&lt;/SPAN&gt; System.Drawing.Text.PrivateFontCollection();&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  19:&lt;/SPAN&gt;             &lt;STRONG&gt;privateFonts.AddFontFile(&lt;SPAN style=&quot;COLOR: #006080&quot;&gt;&quot;3of9_new.ttf&quot;&lt;/SPAN&gt;);&lt;/STRONG&gt;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  20:&lt;/SPAN&gt;             Font font = &lt;SPAN style=&quot;COLOR: #0000ff&quot;&gt;new&lt;/SPAN&gt; Font(&lt;STRONG&gt;privateFonts.Families[0]&lt;/STRONG&gt;, 24f);&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  21:&lt;/SPAN&gt;             label1.Text = &lt;SPAN style=&quot;COLOR: #006080&quot;&gt;&quot;*12315161321*&quot;&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  22:&lt;/SPAN&gt;             label1.Font = font;&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  23:&lt;/SPAN&gt;         }&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  24:&lt;/SPAN&gt;     }&lt;/PRE&gt;&lt;PRE style=&quot;PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none&quot;&gt;&lt;SPAN style=&quot;COLOR: #606060&quot;&gt;  25:&lt;/SPAN&gt; }&lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;코드는 간단합니다. &lt;br /&gt;&lt;FONT face=Consolas&gt;PrivateFontCollection&lt;/FONT&gt; 클래스의 객체를 생성하고 사용하고자 하는 폰트파일의 경로를 추가하는 것 만으로 사용준비가 완료됩니다. &lt;br /&gt;그리고, 사용할때는&amp;nbsp; &lt;FONT face=Consolas&gt;PrivateFontCollection&lt;/FONT&gt; 클래스의 &lt;FONT face=Consolas&gt;Families&lt;/FONT&gt; 속성을 이용하여 추가한 폰트를 가져옵니다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;https://t1.daumcdn.net/tistoryfile/fs7/18_10_2_34_blog29469_attach_0_0.png?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/tistoryfile/fs8/18_10_2_34_blog29469_attach_0_1.png?original&quot; height=&quot;152&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;실행결과 입니다. 운영체제에 설치되지 않은 바코드 폰트를 이용하여&lt;FONT face=Consolas&gt; Label&lt;/FONT&gt;로의 출력이 완료되었습니다.&lt;/P&gt;
&lt;P&gt;마지막으로 MSDN에 보면 운영체제에 설치된 컬렉션을 보려면 &lt;A href=&quot;http://msdn.microsoft.com/ko-kr/system.drawing.text.installedfontcollection.aspx&quot; target=_blank&gt;&lt;FONT face=Consolas&gt;System.Drawing.Text.InstalledFontCollection&lt;/FONT&gt;&lt;/A&gt;클래스를 사용한다고 되어 있습니다. &lt;br /&gt;이 두가지 클래스를 이용하면 설치된 폰트를 확인하고, 내가 원하는 폰트파일을 임시로 등록하여, 각 폰트별로 내가 원하는 텍스트에 대한 출력을 미리보기가 가능할 뿐만 아니라 포토샵과 다른 프로그램에서 프로그램이 실행 중일 동안만 사용이 가능하도록 할 수 도 있는 아래와 같은 프로그램을 만들 수 있을 듯합니다. ^^;&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;https://t1.daumcdn.net/tistoryfile/fs7/18_10_2_34_blog29469_attach_0_1.png?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/tistoryfile/fs8/18_10_2_34_blog29469_attach_0_2.png?original&quot; height=&quot;400&quot; /&gt;&lt;/A&gt; &lt;br /&gt;&lt;br /&gt;폰트다운로드: &lt;br /&gt;&lt;div class=&quot;imageblock left&quot; style=&quot;float: left; margin-right: 10px;&quot;&gt;&lt;a href=&quot;https://t1.daumcdn.net/tistoryfile/fs9/18_10_2_34_blog29469_attach_0_1.ttf?original&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;https://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/ttf.gif&quot; style=&quot;vertical-align: middle;&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;invalid-file&lt;/a&gt;&lt;/div&gt;
&lt;/P&gt;</description>
      <category>C#</category>
      <category>Barcode</category>
      <category>Font</category>
      <author>ntils</author>
      <guid isPermaLink="true">https://whistle.tistory.com/42</guid>
      <comments>https://whistle.tistory.com/entry/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%97%90-%EB%93%B1%EB%A1%9D%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%ED%8F%B0%ED%8A%B8-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0#entry42comment</comments>
      <pubDate>Mon, 25 Aug 2008 11:54:50 +0900</pubDate>
    </item>
  </channel>
</rss>