<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>C and it&#039;s sharp &#187; Tools</title>
	<atom:link href="http://berndhengelein.de/tag/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://berndhengelein.de</link>
	<description>berndhengelein.de</description>
	<lastBuildDate>Sat, 30 Oct 2010 20:08:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>NUnit mit .NET 4.0 Assemblies verwenden</title>
		<link>http://berndhengelein.de/2010/07/nunit-mit-net-4-0-assemblies-verwenden/</link>
		<comments>http://berndhengelein.de/2010/07/nunit-mit-net-4-0-assemblies-verwenden/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 18:41:33 +0000</pubDate>
		<dc:creator>Bernd</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[.NET 4.0]]></category>
		<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://berndhengelein.de/?p=321</guid>
		<description><![CDATA[ Bei unseren Projekten stellen wir gerade von Visual Studio 2008 auf Visual Studio 2010 mit .NET 4.0 um. Der Umstieg läuft recht problemlos. Die Unittests sind alle mit dem NUnit Unittest Framework entwickelt. Ein kurzer Blick auf die NUnit Homepage zeigt, dass die aktuelle Version 2.5.5 mit .NET 4.0 funktioniert. Also, Version runtergeladen, entpackt [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://berndhengelein.de/wp-content/uploads/2010/07/lightbulb1.png"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; display: inline; border-top: 0px; border-right: 0px" title="lightbulb" border="0" alt="lightbulb" align="left" src="http://berndhengelein.de/wp-content/uploads/2010/07/lightbulb_thumb1.png" width="119" height="119" /></a> Bei unseren Projekten stellen wir gerade von Visual Studio 2008 auf Visual Studio 2010 mit .NET 4.0 um. Der Umstieg läuft recht problemlos. Die Unittests sind alle mit dem NUnit Unittest Framework entwickelt. Ein kurzer Blick auf die <a href="http://nunit.org/" target="_blank">NUnit Homepage</a> zeigt, dass die aktuelle <a href="http://nunit.org/index.php?p=docHome&amp;r=2.5.5" target="_blank">Version 2.5.5</a> mit .NET 4.0 funktioniert. Also, Version runtergeladen, entpackt und alles kompiliert noch. Als Entwickler verwende ich den Unittestrunner von <a href="http://www.jetbrains.com/resharper/" target="_blank">Resharper</a>. Und siehe da, alle Tests laufen noch und sind grün. Perfekt!</p>
<p>Auf dem Buildrechner sieht es leider nicht so gut aus. Die Unittests laufen überhaupt nicht mehr. Dort werden die Tests mit dem Consolerunner von NUnit ausgeführt. Ein Aufruf desselben auf meinem Rechner bringt folgende (bzw. eine ähnliche) Ausgabe:</p>
<blockquote><p>Execution Runtime: net-2.0      <br />Unhandled Exception:       <br />System.BadImageFormatException: Could not load file or assembly &#8216;C:\Users\Bernd\documents\visual studio 2010\Projects\SomeProjects\SomeProject.Unittests\bin\Debug\SomeProject.Unittests.dll&#8217; or one of       <br />its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.       <br />File name: &#8216;C:\Users\Bernd\documents\visual studio 2010\Projects\SomeProjects\SomeProject.Unittests\bin\Debug\SomeProject.Unittests.dll&#8217;</p>
</blockquote>
<p>Was ist da los?</p>
<p>Die NUnit Assemblies selbst sind mit .NET 2.0 kompiliert. Der Consolerunner von NUnit läuft also auch mit der CLR 2.0 und kann somit keine Assemblies laden, die mit .NET 4.0 erstellt wurden. Glücklicherweise haben die Entwickler von NUnit genau für diese Fälle einen Kommandozeilenparameter für nunit-console.exe eingebaut. Mit dem Schalter <strong>“/framework” </strong>kann man angeben mit welcher .NET Runtime die Test ausgeführt werden sollen. Der korrekte Aufruf lautet also:</p>
<blockquote><p>nunit-console.exe /framework:v4.0.30319 bin\Debug\SomeProject.Unittests.dll</p>
</blockquote>
<p>Jetzt tritt keine Exception mehr auf und die Tests laufen auch auf der Console sauber durch.</p>
<p>Der Schalter war übrigens vor dem Umstieg (es wurde .NET 3.5 SP1 verwendet) nicht notwendig, da .NET 3.5 dieselbe CLR wie .NET 2.0 verwendet.</p>
]]></content:encoded>
			<wfw:commentRss>http://berndhengelein.de/2010/07/nunit-mit-net-4-0-assemblies-verwenden/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WPF Databinding Probleme mit Snoop finden</title>
		<link>http://berndhengelein.de/2009/01/wpf-databinding-probleme-mit-snoop-finden/</link>
		<comments>http://berndhengelein.de/2009/01/wpf-databinding-probleme-mit-snoop-finden/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 21:26:40 +0000</pubDate>
		<dc:creator>Bernd</dc:creator>
				<category><![CDATA[Softwareentwicklung]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://berndhengelein.de/?p=53</guid>
		<description><![CDATA[WPF Databindings werden häufig in XAML definiert. Da kann es schon mal vorkommen, daß sich der eine oder andere Tippfehler einschleicht &#8211; mit dem Ergebnis, daß das Binding nicht wie gewünscht funktioniert. Simples Beispiel:

&#60;Window x:Class=&#34;DataBinding.Window1&#34;
   xmlns=&#34;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#34;
   xmlns:x=&#34;http://schemas.microsoft.com/winfx/2006/xaml&#34;
   xmlns:local=&#34;clr-namespace:DataBinding&#34;
   Title=&#34;Binding error&#34; Height=&#34;300&#34; Width=&#34;300&#34;&#62;

   &#60;Window.Resources&#62;
   [...]]]></description>
			<content:encoded><![CDATA[<p>WPF Databindings werden häufig in XAML definiert. Da kann es schon mal vorkommen, daß sich der eine oder andere Tippfehler einschleicht &#8211; mit dem Ergebnis, daß das Binding nicht wie gewünscht funktioniert. Simples Beispiel:</p>
<div>
<pre style="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, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Window</span> <span style="color: #ff0000">x:Class</span><span style="color: #0000ff">=&quot;DataBinding.Window1&quot;</span>
   <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span>
   <span style="color: #ff0000">xmlns:x</span><span style="color: #0000ff">=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span>
   <span style="color: #ff0000">xmlns:local</span><span style="color: #0000ff">=&quot;clr-namespace:DataBinding&quot;</span>
   <span style="color: #ff0000">Title</span><span style="color: #0000ff">=&quot;Binding error&quot;</span> <span style="color: #ff0000">Height</span><span style="color: #0000ff">=&quot;300&quot;</span> <span style="color: #ff0000">Width</span><span style="color: #0000ff">=&quot;300&quot;</span><span style="color: #0000ff">&gt;</span>

   <span style="color: #0000ff">&lt;</span><span style="color: #800000">Window.Resources</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">local:CompactDisc</span> <span style="color: #ff0000">x:Key</span><span style="color: #0000ff">=&quot;myOneAndOnlyCD&quot;</span> <span style="color: #ff0000">Title</span><span style="color: #0000ff">=&quot;Images And Words&quot;</span> <span style="color: #ff0000">Artist</span><span style="color: #0000ff">=&quot;Dream Theater&quot;</span><span style="color: #0000ff">/&gt;</span>
   <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Window.Resources</span><span style="color: #0000ff">&gt;</span>

   <span style="color: #0000ff">&lt;</span><span style="color: #800000">StackPanel</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span> <span style="color: #ff0000">Text</span><span style="color: #0000ff">=&quot;{Binding Source={StaticResource myOneAndOnlyCD}, Path=Titel}&quot;</span><span style="color: #0000ff">/&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">TextBlock</span> <span style="color: #ff0000">Text</span><span style="color: #0000ff">=&quot;{Binding Source={StaticResource myOneAndOnlyCD}, Path=Artist}&quot;</span><span style="color: #0000ff">/&gt;</span>
   <span style="color: #0000ff">&lt;/</span><span style="color: #800000">StackPanel</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">Window</span><span style="color: #0000ff">&gt;</span></pre>
</div>
<p>&#160;</p>
<p>CompactDisc ist die einfachste aller Klassen:</p>
<div>
<pre style="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, &#39;Courier New&#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #0000ff">namespace</span> DataBinding
{
   <span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> CompactDisc
   {
       <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Title { get; set; }
       <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Artist { get; set; }
   }
}</pre>
</div>
<p>&#160;</p>
<p>Wird dieser Code ausgeführt, wundert man sich, daß zwar der Künstlername angezeigt wird, aber der Titel nicht. Was ist passiert?</p>
<p>Hier kommt <a href="http://blois.us/Snoop">Snoop</a> ins Spiel. Snoop ist eines der vielen kleinen Tools die dem WPF Entwickler das Leben leichter machen. Neben diversen anderen Features wie</p>
<ul>
<li>den <a href="http://msdn.microsoft.com/en-us/library/ms753391.aspx">Visual Tree</a> betrachten </li>
<li>Eigenschaften der Elemente im Visual Tree editieren </li>
<li>Routed Events verfolgen </li>
<li>Zoom der ausgewählten WPF Anwendung </li>
<li>&#8230; </li>
</ul>
<p>kann das Tool auch Binding Fehler anzeigen.</p>
<p>Nach dem Start listet Snoop in einer Combobox alle WPF Applikationen auf, die momentan ausgeführt werden.</p>
<p><a href="http://berndhengelein.de/wp-content/uploads/2009/02/snoopstartup.png"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="30" alt="SnoopStartup" src="http://berndhengelein.de/wp-content/uploads/2009/02/snoopstartup-thumb.png" width="409" border="0" /></a></p>
<p>Man wählt die betreffende Applikation aus und mit einem Klick auf das Fernglas verbindet sich Snoop damit. Es öffnet sich ein weiteres Fenster in dem man sich den Details widmen kann:</p>
<p>&#160;<a href="http://berndhengelein.de/wp-content/uploads/2009/02/snoopvisualtree.png"><img alt="Snoop visual tree" src="http://berndhengelein.de/wp-content/uploads/2009/02/snoopvisualtree.png" /></a></p>
<p>Öffnet man nun die Combobox in der linken, oberen Ecke findet man den Eintrag “Visuals with binding errors”. Wählt man diesen aus, erhält man eine gefilterte Liste:</p>
<p><a href="http://berndhengelein.de/wp-content/uploads/2009/02/snoopvisualtreeerrors.png"><img alt="Snoop binding errors" src="http://berndhengelein.de/wp-content/uploads/2009/02/snoopvisualtreeerrors.png" /></a> </p>
<p>In dem Properties Tab auf der rechten Seite wird nun die betroffene Eigenschaft rot eingefärbt. Ein Tooltip zeigt die komplette Fehlermeldung: </p>
<blockquote>
<p>System.Windows.Data Error: 39 : BindingExpression path error: &#8216;<strong>Titel</strong>&#8216; property not found on &#8216;object&#8217; &#8221;CompactDisc&#8217; (HashCode=33736294)&#8217;. BindingExpression:Path=Titel; DataItem=&#8217;CompactDisc&#8217; (HashCode=33736294); target element is &#8216;TextBlock&#8217; (Name=&#8221;); target property is &#8216;Text&#8217; (type &#8216;String&#8217;)</p>
</blockquote>
<p>Es hat sich also ein Tippfehler bei dem ersten Binding gegen die Eigenschaft “Title” eingeschlichen. </p>
<p>Ok, ok. Den Fehler sieht man auch sofort, wenn die Anwendung im Debugmodus aus dem Visual Studio gestartet wird. Dort wird der gleiche Fehlertext im Output Fenster angezeigt. Aber ich wollte halt meine Begeisterung über Snoop teilen… </p>
<p>Um auch komplizierteren Bindingproblemen auf die Spur zu kommen gibt es seit .Net 3.5 an der <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.aspx">PresentationTraceSources</a> Klasse die Attached Property <a href="http://msdn.microsoft.com/en-us/library/system.diagnostics.presentationtracesources.tracelevelproperty.aspx">TraceLevel</a>. <a href="http://bea.stollnitz.com/blog/">Bea Stollnitz</a> zeigt <a href="http://bea.stollnitz.com/blog/?p=52">hier</a> wie man sie einsetzt (und gibt noch ein paar weitere Tipps zu Debugging von WPF Databinding). </p>
]]></content:encoded>
			<wfw:commentRss>http://berndhengelein.de/2009/01/wpf-databinding-probleme-mit-snoop-finden/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

