<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>RichardSoeteman.net - Visual Studio</title>
    <link>http://www.richardsoeteman.net/</link>
    <description />
    <language>en-us</language>
    <copyright>Richard Soeteman</copyright>
    <lastBuildDate>Sun, 03 Aug 2008 07:27:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>richard@richardsoeteman.net</managingEditor>
    <webMaster>richard@richardsoeteman.net</webMaster>
    <item>
      <trackback:ping>http://www.richardsoeteman.net/Trackback.aspx?guid=ce0c1abb-fa66-400e-aaa6-59c9c979e782</trackback:ping>
      <pingback:server>http://www.richardsoeteman.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.richardsoeteman.net/PermaLink,guid,ce0c1abb-fa66-400e-aaa6-59c9c979e782.aspx</pingback:target>
      <dc:creator>Richard Soeteman</dc:creator>
      <wfw:comment>http://www.richardsoeteman.net/CommentView,guid,ce0c1abb-fa66-400e-aaa6-59c9c979e782.aspx</wfw:comment>
      <wfw:commentRss>http://www.richardsoeteman.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ce0c1abb-fa66-400e-aaa6-59c9c979e782</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
We kennen allemaal de kracht van een debug visualizer, even snel de data van een dataset
bekijken, selecteer de juiste visualizer in Visual Studio en een mooi debugger dialog
window wordt getoond met daarin je complete datastructuur en data. Het maken van een
debugger visualizer is ook redelijk simpel. Voor wie dat nog nooit heeft gedaan raad
ik aan <a title="How Do I: Create a Debugger Visualizer?" href="http://msdn.microsoft.com/vs2005/cc527465.aspx" target="_blank">deze
video</a> eens te bekijken.
</p>
        <p>
Het nadeel van deze video en andere tutorials die over dit onderwerp gaan is dat ze
altijd een serializable object gebruiken. Nu zijn je eigen objecten vaak wel serializable,
maar er zijn ook heel veel objecten niet serializable en soms wil je daar echt een
visualizer voor hebben. Probeer je deze objecten toch te gebruiken krijg je de volgende
foutmelding te zien.
</p>
        <p>
          <img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="186" alt="NonSerializableErrorMessage" src="http://www.richardsoeteman.net/content/binary/WindowsLiveWriter/DebugVisualizersvoorNonSerializableobjec_E7C1/NonSerializableErrorMessage_3.jpg" width="453" border="0" />  
</p>
        <p>
Een aantal maanden geleden werkte ik op een project waar intensief gebruik werd gemaakt
van querystring- en formulierdata en wilde hiervoor een Visualizer maken. Ik werd
direct geconfronteerd met bovenstaande foutmelding en besloot wat dieper in de materie
te duiken. Middels onderstaand code voorbeeld zal ik uitleggen wat er gebeurd.
</p>
        <div class="csharpcode">
          <pre>
            <span class="lnum"> 1: </span>
            <span class="kwrd">using</span> System.Diagnostics;</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">using</span> System.Web.UI;</pre>
          <pre>
            <span class="lnum"> 3: </span>
            <span class="kwrd">using</span> Microsoft.VisualStudio.DebuggerVisualizers;</pre>
          <pre>
            <span class="lnum"> 4: </span> </pre>
          <pre>
            <span class="lnum"> 5: </span>[assembly:
DebuggerVisualizer(<span class="kwrd">typeof</span>(PageErrorVisualizer.PageErrorVisualizer), <span class="kwrd">typeof</span>(VisualizerObjectSource),
Target = <span class="kwrd">typeof</span>(Page), Description = <span class="str">"PageErrorVisualizer
Visualizer"</span>)]</pre>
          <pre>
            <span class="lnum"> 6: </span>
            <span class="kwrd">namespace</span> PageErrorVisualizer</pre>
          <pre>
            <span class="lnum"> 7: </span>{</pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="rem">///
&lt;summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 9: </span>
            <span class="rem">///
The Visualizer for type System.Web.UI.Page</span>
          </pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="rem">///
&lt;/summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 11: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">class</span> PageErrorVisualizer
: DialogDebuggerVisualizer</pre>
          <pre>
            <span class="lnum"> 12: </span> {</pre>
          <pre>
            <span class="lnum"> 13: </span>
            <span class="rem">///
&lt;summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 14: </span>
            <span class="rem">///
Shows the object in the visualizer form</span>
          </pre>
          <pre>
            <span class="lnum"> 15: </span>
            <span class="rem">///
&lt;/summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 16: </span>
            <span class="kwrd">protected</span>
            <span class="kwrd">override</span>
            <span class="kwrd">void</span> Show(IDialogVisualizerService
windowService, IVisualizerObjectProvider objectProvider)</pre>
          <pre>
            <span class="lnum"> 17: </span> {</pre>
          <pre>
            <span class="lnum"> 18: </span> Page
page = (Page)objectProvider.GetObject();</pre>
          <pre>
            <span class="lnum"> 19: </span> </pre>
          <pre>
            <span class="lnum"> 20: </span>
            <span class="rem">//Initialize
the Visualizer Form and Show the data</span>
          </pre>
          <pre>
            <span class="lnum"> 21: </span>
            <span class="kwrd">using</span> (VisualizerForm
frm = <span class="kwrd">new</span> VisualizerForm())</pre>
          <pre>
            <span class="lnum"> 22: </span> {</pre>
          <pre>
            <span class="lnum"> 23: </span> frm.ShowVisualizer(pageData);</pre>
          <pre>
            <span class="lnum"> 24: </span> }</pre>
          <pre>
            <span class="lnum"> 25: </span> }</pre>
          <pre>
            <span class="lnum"> 26: </span> }</pre>
          <pre>
            <span class="lnum"> 27: </span>}</pre>
        </div>
        <style type="text/css">











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <style type="text/css">











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
Wanneer je een debug visualizer maakt zal je in het Assembly attribuut moeten aangeven
dat we een DebuggerVisualizer aan het maken zijn en verwacht de volgende gegevens:
</p>
        <ul>
          <li>
Het object type van de Visualizer die we gaan gebruiken 
</li>
          <li>
Het object type van de VisualizerObjectSource die we willen gebruiken 
</li>
          <li>
Het object type waar we een visualizer voor willen maken 
</li>
          <li>
De omschrijving die in Visual studio wordt getoond wannneer we de visualizer selecteren 
</li>
        </ul>
        <p>
Het VisualizerObjectSource object dat standaard in visual studio zit bleek de boosdoener.
In het standaard  VisualizerObjectSource object wordt er vanuit gegaan dat een
object serializable is, wat dus niet altijd het geval is en daarmee de oorzaak van
bovenstaande foutmelding. Nu kunnen we van deze klasse afleiden. Eén van de methoden
die we kunnen overschrijven is de methode GetData. Getdata verwacht het object waar
we een visualizer voor willen maken en de stream waar de data ingeplaatst mag worden. 
</p>
        <p>
Onderstaand voorbeeld toont een versimpelde vorm van  de klasse die ik gebruikt
heb. In GetData cast ik het target object naar een page object en creëer ik een instantie
van PageData object. Het PageData object is een eigen gemaakt serializable object
dat de benodigde waarden kan vasthouden.  Hier kan ik vervolgens de benodigde
data op plaatsen.  Uiteindelijk vervang ik het Page object in target door mijn
eigen PageData object en de base functionaliteit zorgt ervoor dat het PageData object
netjes serialized wordt en in de visualizer gebruikt kan worden. 
</p>
        <div class="csharpcode">
          <pre>
            <span class="lnum"> 1: </span>
            <span class="kwrd">using</span> System.Data;</pre>
          <pre>
            <span class="lnum"> 2: </span>
            <span class="kwrd">using</span> System.Web;</pre>
          <pre>
            <span class="lnum"> 3: </span>
            <span class="kwrd">using</span> Microsoft.VisualStudio.DebuggerVisualizers;</pre>
          <pre>
            <span class="lnum"> 4: </span> </pre>
          <pre>
            <span class="lnum"> 5: </span>
            <span class="kwrd">namespace</span> WebVisualizers.ObjectSource</pre>
          <pre>
            <span class="lnum"> 6: </span>{</pre>
          <pre>
            <span class="lnum"> 7: </span>
            <span class="rem">///
&lt;summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 8: </span>
            <span class="rem">///
Specialized ObjectSource for System.Web.UI.Page</span>
          </pre>
          <pre>
            <span class="lnum"> 9: </span>
            <span class="rem">///
&lt;/summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 10: </span>
            <span class="rem">///
&lt;remarks&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 11: </span>
            <span class="rem">///
This class is needed because the System.Web.UI.Page is not serializable and IVisualizerObjectProvider
expects it to be serializable</span>
          </pre>
          <pre>
            <span class="lnum"> 12: </span>
            <span class="rem">///
In the GetData Method System.Web.UI.Page will be turned into something that is Serializable</span>
          </pre>
          <pre>
            <span class="lnum"> 13: </span>
            <span class="rem">///
&lt;/remarks&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 14: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">class</span> WebPageObjectSource
: VisualizerObjectSource</pre>
          <pre>
            <span class="lnum"> 15: </span> {</pre>
          <pre>
            <span class="lnum"> 16: </span>
            <span class="rem">///
&lt;summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 17: </span>
            <span class="rem">///
Takes a Page object get Data from it and store it into PageData</span>
          </pre>
          <pre>
            <span class="lnum"> 18: </span>
            <span class="rem">///
Replace the target object wit PageData and call the base functionality</span>
          </pre>
          <pre>
            <span class="lnum"> 19: </span>
            <span class="rem">///
&lt;/summary&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 20: </span>
            <span class="rem">///
&lt;param name="target"&gt;System.Web.UI.Page&lt;/param&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 21: </span>
            <span class="rem">///
&lt;param name="outgoingData"&gt;Output stream (PageData)&lt;/param&gt;</span>
          </pre>
          <pre>
            <span class="lnum"> 22: </span>
            <span class="kwrd">public</span>
            <span class="kwrd">override</span>
            <span class="kwrd">void</span> GetData(<span class="kwrd">object</span> target,
System.IO.Stream outgoingData)</pre>
          <pre>
            <span class="lnum"> 23: </span> {</pre>
          <pre>
            <span class="lnum"> 24: </span>
            <span class="kwrd">if</span> (target
!= <span class="kwrd">null</span>)</pre>
          <pre>
            <span class="lnum"> 25: </span> {</pre>
          <pre>
            <span class="lnum"> 26: </span> Page
page = (Page)target; ;</pre>
          <pre>
            <span class="lnum"> 27: </span> PageData pageData
= <span class="kwrd">new</span> PageData();</pre>
          <pre>
            <span class="lnum"> 28: </span>
            <span class="rem">//Fill
Pagedata based on page object</span>
          </pre>
          <pre>
            <span class="lnum"> 29: </span>
            <span class="rem">//example
pageData.Add(page.Session)</span>
          </pre>
          <pre>
            <span class="lnum"> 30: </span> </pre>
          <pre>
            <span class="lnum"> 31: </span>
            <span class="rem">//Replace
target with PageData object</span>
          </pre>
          <pre>
            <span class="lnum"> 32: </span> target
= pageData;</pre>
          <pre>
            <span class="lnum"> 33: </span> }</pre>
          <pre>
            <span class="lnum"> 34: </span>
            <span class="rem">//Call
Base functionality</span>
          </pre>
          <pre>
            <span class="lnum"> 35: </span>
            <span class="kwrd">base</span>.GetData(target,
outgoingData);</pre>
          <pre>
            <span class="lnum"> 36: </span> }</pre>
          <pre>
            <span class="lnum"> 37: </span> }</pre>
          <pre>
            <span class="lnum"> 38: </span>}</pre>
        </div>
        <style type="text/css">










.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
Op deze manier kunnen we dus voor elk gewenst object een Debug Visualizer maken, mits
we in een eigen VisualizerObjectSource klasse ervoor zorgen dat het object in target
vervangen wordt door een serializable object wat de benodigde data vasthoudt. 
De code die ik in deze blogpost heb gebruikt, maakt deel uit van <a title="Webvisualizers" href="http://www.codeplex.com/webvisualizers" target="_blank">het
WebVisualizer project</a> wat ik enige tijd geleden op codeplex heb geplaatst. De
volledige source code van dit project is <a title="Webvisualizers source code" href="http://www.codeplex.com/webvisualizers/SourceControl/ListDownloadableCommits.aspx" target="_blank">hier
te downloaden</a>.
</p>
        <img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=ce0c1abb-fa66-400e-aaa6-59c9c979e782" />
      </body>
      <title>Debug Visualizers voor niet serializable typen</title>
      <guid isPermaLink="false">http://www.richardsoeteman.net/PermaLink,guid,ce0c1abb-fa66-400e-aaa6-59c9c979e782.aspx</guid>
      <link>http://www.richardsoeteman.net/2008/08/03/DebugVisualizersVoorNietSerializableTypen.aspx</link>
      <pubDate>Sun, 03 Aug 2008 07:27:53 GMT</pubDate>
      <description>&lt;p&gt;
We kennen allemaal de kracht van een debug visualizer, even snel de data van een dataset
bekijken, selecteer de juiste visualizer in Visual Studio en een mooi debugger dialog
window wordt getoond met daarin je complete datastructuur en data. Het maken van een
debugger visualizer is ook redelijk simpel. Voor wie dat nog nooit heeft gedaan raad
ik aan &lt;a title="How Do I: Create a Debugger Visualizer?" href="http://msdn.microsoft.com/vs2005/cc527465.aspx" target=_blank&gt;deze
video&lt;/a&gt; eens te bekijken.
&lt;/p&gt;
&lt;p&gt;
Het nadeel van deze video en andere tutorials die over dit onderwerp gaan is dat ze
altijd een serializable object gebruiken. Nu zijn je eigen objecten vaak wel serializable,
maar er zijn ook heel veel objecten niet serializable en soms wil je daar echt een
visualizer voor hebben. Probeer je deze objecten toch te gebruiken krijg je de volgende
foutmelding te zien.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=186 alt=NonSerializableErrorMessage src="http://www.richardsoeteman.net/content/binary/WindowsLiveWriter/DebugVisualizersvoorNonSerializableobjec_E7C1/NonSerializableErrorMessage_3.jpg" width=453 border=0&gt;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Een aantal maanden geleden werkte ik op een project waar intensief gebruik werd gemaakt
van querystring- en formulierdata en wilde hiervoor een Visualizer maken. Ik werd
direct geconfronteerd met bovenstaande foutmelding en besloot wat dieper in de materie
te duiken. Middels onderstaand code voorbeeld zal ik uitleggen wat er gebeurd.
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Diagnostics;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Web.UI;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; Microsoft.VisualStudio.DebuggerVisualizers;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt;[assembly:
DebuggerVisualizer(&lt;span class=kwrd&gt;typeof&lt;/span&gt;(PageErrorVisualizer.PageErrorVisualizer), &lt;span class=kwrd&gt;typeof&lt;/span&gt;(VisualizerObjectSource),
Target = &lt;span class=kwrd&gt;typeof&lt;/span&gt;(Page), Description = &lt;span class=str&gt;"PageErrorVisualizer
Visualizer"&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt;&lt;span class=kwrd&gt;namespace&lt;/span&gt; PageErrorVisualizer&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; &lt;span class=rem&gt;///
The Visualizer for type System.Web.UI.Page&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; PageErrorVisualizer
: DialogDebuggerVisualizer&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; &lt;span class=rem&gt;///
Shows the object in the visualizer form&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt; &lt;span class=kwrd&gt;protected&lt;/span&gt; &lt;span class=kwrd&gt;override&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; Show(IDialogVisualizerService
windowService, IVisualizerObjectProvider objectProvider)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 18: &lt;/span&gt; Page
page = (Page)objectProvider.GetObject();&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 19: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 20: &lt;/span&gt; &lt;span class=rem&gt;//Initialize
the Visualizer Form and Show the data&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 21: &lt;/span&gt; &lt;span class=kwrd&gt;using&lt;/span&gt; (VisualizerForm
frm = &lt;span class=kwrd&gt;new&lt;/span&gt; VisualizerForm())&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 22: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 23: &lt;/span&gt; frm.ShowVisualizer(pageData);&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 24: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 25: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 26: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 27: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=text/css&gt;











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;style type=text/css&gt;











.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
Wanneer je een debug visualizer maakt zal je in het Assembly attribuut moeten aangeven
dat we een DebuggerVisualizer aan het maken zijn en verwacht de volgende gegevens:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Het object type van de Visualizer die we gaan gebruiken 
&lt;li&gt;
Het object type van de VisualizerObjectSource die we willen gebruiken 
&lt;li&gt;
Het object type waar we een visualizer voor willen maken 
&lt;li&gt;
De omschrijving die in Visual studio wordt getoond wannneer we de visualizer selecteren 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Het VisualizerObjectSource object dat standaard in visual studio zit bleek de boosdoener.
In het standaard&amp;nbsp; VisualizerObjectSource object wordt er vanuit gegaan dat een
object serializable is, wat dus niet altijd het geval is en daarmee de oorzaak van
bovenstaande foutmelding. Nu kunnen we van deze klasse afleiden. Eén van de methoden
die we kunnen overschrijven is de methode GetData. Getdata verwacht het object waar
we een visualizer voor willen maken en de stream waar de data ingeplaatst mag worden. 
&lt;/p&gt;
&lt;p&gt;
Onderstaand voorbeeld toont een versimpelde vorm van&amp;nbsp; de klasse die ik gebruikt
heb. In GetData cast ik het target object naar een page object en creëer ik een instantie
van PageData object. Het PageData object is een eigen gemaakt serializable object
dat de benodigde waarden kan vasthouden.&amp;nbsp; Hier kan ik vervolgens de benodigde
data op plaatsen.&amp;nbsp; Uiteindelijk vervang ik het Page object in target door mijn
eigen PageData object en de base functionaliteit zorgt ervoor dat het PageData object
netjes serialized wordt en in de visualizer gebruikt kan worden. 
&lt;/p&gt;
&lt;div class=csharpcode&gt;&lt;pre&gt;&lt;span class=lnum&gt; 1: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Data;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 2: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 3: &lt;/span&gt;&lt;span class=kwrd&gt;using&lt;/span&gt; Microsoft.VisualStudio.DebuggerVisualizers;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 4: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 5: &lt;/span&gt;&lt;span class=kwrd&gt;namespace&lt;/span&gt; WebVisualizers.ObjectSource&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 6: &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 7: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 8: &lt;/span&gt; &lt;span class=rem&gt;///
Specialized ObjectSource for System.Web.UI.Page&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 9: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 10: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;remarks&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 11: &lt;/span&gt; &lt;span class=rem&gt;///
This class is needed because the System.Web.UI.Page is not serializable and IVisualizerObjectProvider
expects it to be serializable&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 12: &lt;/span&gt; &lt;span class=rem&gt;///
In the GetData Method System.Web.UI.Page will be turned into something that is Serializable&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 13: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 14: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;class&lt;/span&gt; WebPageObjectSource
: VisualizerObjectSource&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 15: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 16: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 17: &lt;/span&gt; &lt;span class=rem&gt;///
Takes a Page object get Data from it and store it into PageData&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 18: &lt;/span&gt; &lt;span class=rem&gt;///
Replace the target object wit PageData and call the base functionality&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 19: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 20: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;param name="target"&amp;gt;System.Web.UI.Page&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 21: &lt;/span&gt; &lt;span class=rem&gt;///
&amp;lt;param name="outgoingData"&amp;gt;Output stream (PageData)&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 22: &lt;/span&gt; &lt;span class=kwrd&gt;public&lt;/span&gt; &lt;span class=kwrd&gt;override&lt;/span&gt; &lt;span class=kwrd&gt;void&lt;/span&gt; GetData(&lt;span class=kwrd&gt;object&lt;/span&gt; target,
System.IO.Stream outgoingData)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 23: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 24: &lt;/span&gt; &lt;span class=kwrd&gt;if&lt;/span&gt; (target
!= &lt;span class=kwrd&gt;null&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 25: &lt;/span&gt; {&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 26: &lt;/span&gt; Page
page = (Page)target; ;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 27: &lt;/span&gt; PageData pageData = &lt;span class=kwrd&gt;new&lt;/span&gt; PageData();&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 28: &lt;/span&gt; &lt;span class=rem&gt;//Fill
Pagedata based on page object&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 29: &lt;/span&gt; &lt;span class=rem&gt;//example
pageData.Add(page.Session)&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 30: &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 31: &lt;/span&gt; &lt;span class=rem&gt;//Replace
target with PageData object&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 32: &lt;/span&gt; target
= pageData;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 33: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 34: &lt;/span&gt; &lt;span class=rem&gt;//Call
Base functionality&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 35: &lt;/span&gt; &lt;span class=kwrd&gt;base&lt;/span&gt;.GetData(target,
outgoingData);&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 36: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 37: &lt;/span&gt; }&lt;/pre&gt;&lt;pre&gt;&lt;span class=lnum&gt; 38: &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type=text/css&gt;










.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
Op deze manier kunnen we dus voor elk gewenst object een Debug Visualizer maken, mits
we in een eigen VisualizerObjectSource klasse ervoor zorgen dat het object in target
vervangen wordt door een serializable object wat de benodigde data vasthoudt.&amp;nbsp;
De code die ik in deze blogpost heb gebruikt, maakt deel uit van &lt;a title=Webvisualizers href="http://www.codeplex.com/webvisualizers" target=_blank&gt;het
WebVisualizer project&lt;/a&gt; wat ik enige tijd geleden op codeplex heb geplaatst. De
volledige source code van dit project is &lt;a title="Webvisualizers source code" href="http://www.codeplex.com/webvisualizers/SourceControl/ListDownloadableCommits.aspx" target=_blank&gt;hier
te downloaden&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=ce0c1abb-fa66-400e-aaa6-59c9c979e782" /&gt;</description>
      <comments>http://www.richardsoeteman.net/CommentView,guid,ce0c1abb-fa66-400e-aaa6-59c9c979e782.aspx</comments>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.richardsoeteman.net/Trackback.aspx?guid=77026908-faa1-4a09-8caa-7dc89c44c7f4</trackback:ping>
      <pingback:server>http://www.richardsoeteman.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.richardsoeteman.net/PermaLink,guid,77026908-faa1-4a09-8caa-7dc89c44c7f4.aspx</pingback:target>
      <dc:creator>Richard Soeteman</dc:creator>
      <wfw:comment>http://www.richardsoeteman.net/CommentView,guid,77026908-faa1-4a09-8caa-7dc89c44c7f4.aspx</wfw:comment>
      <wfw:commentRss>http://www.richardsoeteman.net/SyndicationService.asmx/GetEntryCommentsRss?guid=77026908-faa1-4a09-8caa-7dc89c44c7f4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <a href="http://www.codinghorror.com/blog/archives/000428.html" target="_new">Op
deze site</a> word je uitgelegd hoe je in Visual studio kan googelen op geselecteerde
tekst. Je kan niet alleen zoeken in je source window maar ook in je output windows.
Google wordt gestart als een nieuw tabblad binnen visual studio.<br /><br /><a href="http://www.codinghorror.com/blog/archives/000428.html" target="_new">De macro</a> werkt
in Visual Studio 2003 en 2005<br /><br /><img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=77026908-faa1-4a09-8caa-7dc89c44c7f4" /></body>
      <title>Googelen binnen Visual Studio</title>
      <guid isPermaLink="false">http://www.richardsoeteman.net/PermaLink,guid,77026908-faa1-4a09-8caa-7dc89c44c7f4.aspx</guid>
      <link>http://www.richardsoeteman.net/2006/07/27/GoogelenBinnenVisualStudio.aspx</link>
      <pubDate>Thu, 27 Jul 2006 10:27:47 GMT</pubDate>
      <description>&lt;a href="http://www.codinghorror.com/blog/archives/000428.html" target=_new&gt;Op deze
site&lt;/a&gt;&amp;nbsp;word je uitgelegd hoe je in Visual studio kan googelen op geselecteerde
tekst. Je kan niet alleen zoeken in je source window maar ook in je output windows.
Google wordt gestart als een nieuw tabblad binnen visual studio.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.codinghorror.com/blog/archives/000428.html" target=_new&gt;De macro&lt;/a&gt; werkt
in Visual Studio 2003 en 2005&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=77026908-faa1-4a09-8caa-7dc89c44c7f4" /&gt;</description>
      <comments>http://www.richardsoeteman.net/CommentView,guid,77026908-faa1-4a09-8caa-7dc89c44c7f4.aspx</comments>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.richardsoeteman.net/Trackback.aspx?guid=6b701818-51a5-441b-b526-f113f35a4b34</trackback:ping>
      <pingback:server>http://www.richardsoeteman.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.richardsoeteman.net/PermaLink,guid,6b701818-51a5-441b-b526-f113f35a4b34.aspx</pingback:target>
      <dc:creator>Richard Soeteman</dc:creator>
      <wfw:comment>http://www.richardsoeteman.net/CommentView,guid,6b701818-51a5-441b-b526-f113f35a4b34.aspx</wfw:comment>
      <wfw:commentRss>http://www.richardsoeteman.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6b701818-51a5-441b-b526-f113f35a4b34</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Wanneer je normaliter een webservice project
toevoegt aan je solution wordt deze automatisch meegestart wanneer je je windows applicatie
start. Van de week had ik te maken met een webservice die niet automatisch wilde starten
en mocht ik deze handmatig gaan starten. Waarom de webservice niet automatisch startte
was me onduidelijk. Achteraf bleek dit te komen doordat de webservice was ontwikkeld
met gebruik van het <a href="http://webproject.scottgu.com/" target="_new">web application
project</a>. Het web application project wordt behandeld als een windows applicatie
i.p.v. website en daardoor wordt de webservice niet automatisch gestart. Inmiddels
had ik al een work arround gevonden. Op je solution properties kan je aangeven dat
je meerdere projecten wilt starten. Ook kan je de volgorde instellen. In onderstaande
afbeelding heb ik mijn webservice en windows project opgegeven. Ik laat de webservice
als eerste starten omdat ik op deze manier zeker weet dat deze gestart is voordat
mijn applicatie hem gaat consumeren en hierdoor een foutmelding geeft. 
<br /><br /><p align="center"><img src="http://www.richardsoeteman.net/content/binary/solutionproperties.JPG" border="0" /></p>
Nu wordt zowel de webservice als de windows applicatie gestart. Het vervelende is
alleen dat de webservice tijdens het starten een browser scherm opent. Dit is op te
lossen door de project properties van de webservice te openen. In het onderdeel web
kan je een start action opgeven. Zet deze op "Don't open a page. Wait for a request
from an external application".<br /><br /><p align="center"><img src="http://www.richardsoeteman.net/content/binary/projectproperties.JPG" border="0" /></p><img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=6b701818-51a5-441b-b526-f113f35a4b34" /></body>
      <title>Webservice project start niet automatisch in VS2005 </title>
      <guid isPermaLink="false">http://www.richardsoeteman.net/PermaLink,guid,6b701818-51a5-441b-b526-f113f35a4b34.aspx</guid>
      <link>http://www.richardsoeteman.net/2006/07/07/WebserviceProjectStartNietAutomatischInVS2005.aspx</link>
      <pubDate>Fri, 07 Jul 2006 11:10:59 GMT</pubDate>
      <description>Wanneer je normaliter een webservice project toevoegt aan je solution wordt deze automatisch meegestart wanneer je je windows applicatie start. Van de week had ik te maken met een webservice die niet automatisch wilde starten en mocht ik deze handmatig gaan starten. Waarom de webservice niet automatisch startte was me onduidelijk. Achteraf bleek dit te komen doordat de webservice was ontwikkeld met gebruik van het &lt;a href="http://webproject.scottgu.com/" target=_new&gt;web
application project&lt;/a&gt;.&amp;nbsp;Het web application project wordt behandeld als een
windows applicatie i.p.v. website en daardoor wordt de webservice niet automatisch
gestart. Inmiddels had ik al een work arround gevonden. Op je solution properties
kan je aangeven dat je meerdere projecten wilt starten. Ook kan je de volgorde instellen.
In onderstaande afbeelding heb ik mijn webservice en windows project opgegeven. Ik
laat de webservice als eerste starten omdat ik op deze manier zeker weet dat deze
gestart is voordat mijn applicatie hem gaat consumeren en hierdoor een foutmelding
geeft. 
&lt;br /&gt;
&lt;br /&gt;
&lt;p align=center&gt;
&lt;img src="http://www.richardsoeteman.net/content/binary/solutionproperties.JPG" border=0&gt;
&lt;/p&gt;
Nu wordt zowel de webservice als de windows applicatie gestart. Het vervelende is
alleen dat de webservice tijdens het starten een browser scherm opent. Dit is op te
lossen door de project properties van de webservice te openen. In het onderdeel web
kan je een start action opgeven. Zet deze op "Don't open a page. Wait for a request
from an external application".&lt;br /&gt;
&lt;br /&gt;
&lt;p align=center&gt;
&lt;img src="http://www.richardsoeteman.net/content/binary/projectproperties.JPG" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=6b701818-51a5-441b-b526-f113f35a4b34" /&gt;</description>
      <comments>http://www.richardsoeteman.net/CommentView,guid,6b701818-51a5-441b-b526-f113f35a4b34.aspx</comments>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://www.richardsoeteman.net/Trackback.aspx?guid=1b9815e2-c118-49ff-9a81-f08d383418e4</trackback:ping>
      <pingback:server>http://www.richardsoeteman.net/pingback.aspx</pingback:server>
      <pingback:target>http://www.richardsoeteman.net/PermaLink,guid,1b9815e2-c118-49ff-9a81-f08d383418e4.aspx</pingback:target>
      <dc:creator>Richard Soeteman</dc:creator>
      <wfw:comment>http://www.richardsoeteman.net/CommentView,guid,1b9815e2-c118-49ff-9a81-f08d383418e4.aspx</wfw:comment>
      <wfw:commentRss>http://www.richardsoeteman.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1b9815e2-c118-49ff-9a81-f08d383418e4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Zoals ik in een <a href="http://www.richardsoeteman.net/PermaLink,guid,3747d7e0-4ab7-4cca-9040-d9295be7a6f0.aspx" target="_new">eerdere
post</a> al eens heb aangegeven staat Option Strict standaard uit in VB.Net. Dit is
echter een optie die je altijd aan wil zetten. In VS2005 is dit aan te passen. Volg
hiervoor de volgende stappen: 
</p>
        <p>
- Selecteer Tools<br />
- Selecteer Options 
<br />
- Selecteer "Show all settings"<br />
- Klap het menu "Projects and Solutions" uit
</p>
        <p>
Onder VB Defaults kan je de standaard instellingen aanpassen.
</p>
        <p align="center">
          <img src="http://www.richardsoeteman.net/content/binary/defaultvboptions.jpg" border="0" />
        </p>
        <img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=1b9815e2-c118-49ff-9a81-f08d383418e4" />
      </body>
      <title>VB.Net defaults</title>
      <guid isPermaLink="false">http://www.richardsoeteman.net/PermaLink,guid,1b9815e2-c118-49ff-9a81-f08d383418e4.aspx</guid>
      <link>http://www.richardsoeteman.net/2006/05/29/VBNetDefaults.aspx</link>
      <pubDate>Mon, 29 May 2006 12:04:27 GMT</pubDate>
      <description>&lt;p&gt;
Zoals ik in een &lt;a href="http://www.richardsoeteman.net/PermaLink,guid,3747d7e0-4ab7-4cca-9040-d9295be7a6f0.aspx" target=_new&gt;eerdere
post&lt;/a&gt; al eens heb aangegeven staat Option Strict standaard uit in VB.Net. Dit is
echter een optie die je altijd aan wil zetten. In VS2005 is dit aan te passen. Volg
hiervoor de volgende stappen: 
&lt;/p&gt;
&lt;p&gt;
- Selecteer Tools&lt;br&gt;
- Selecteer Options 
&lt;br&gt;
- Selecteer "Show all settings"&lt;br&gt;
- Klap het menu "Projects and Solutions" uit
&lt;/p&gt;
&lt;p&gt;
Onder VB Defaults kan je de standaard instellingen aanpassen.
&lt;/p&gt;
&lt;p align=center&gt;
&lt;img src="http://www.richardsoeteman.net/content/binary/defaultvboptions.jpg" border=0&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.richardsoeteman.net/aggbug.ashx?id=1b9815e2-c118-49ff-9a81-f08d383418e4" /&gt;</description>
      <comments>http://www.richardsoeteman.net/CommentView,guid,1b9815e2-c118-49ff-9a81-f08d383418e4.aspx</comments>
      <category>Visual Studio</category>
    </item>
  </channel>
</rss>