<?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>.Net Expert</title>
    <link>http://blog.dotnet-expert.de/</link>
    <description>List&amp;lt;Feature&amp;gt;Remove(f =&gt; f.Type == FeatureType.Bug);</description>
    <language>en-us</language>
    <copyright>Jens Hofmann</copyright>
    <lastBuildDate>Mon, 04 May 2009 11:55:23 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>admin@dotnet-expert.de</managingEditor>
    <webMaster>admin@dotnet-expert.de</webMaster>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Da in der Firma, für die ich arbeite, sehr viele Regular Expressions verwendet werden
und wir auch sehr viele mit der Option “Compiled” versehen, ist es interessant zu
wissen wie viele Regex denn gecached sind. Leider habe ich keine Möglichkeit gefunden,
die Anzahl ohne Reflection zu ermitteln. Über diesen weg sollte es jedoch ziemlich
performant sein:
</p>
        <div id="codeSnippetWrapper">
          <div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum1" style="color: #606060"> 1:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">class</span> RegexHelper</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum2" style="color: #606060"> 2:</span> {</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum3" style="color: #606060"> 3:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">static</span> ICollection
_listFieldInfo;</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum4" style="color: #606060"> 4:</span>
              <span style="color: #0000ff">private</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">readonly</span>
              <span style="color: #0000ff">object</span> _lockObject
= <span style="color: #0000ff">new</span><span style="color: #0000ff">object</span>();</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum5" style="color: #606060"> 5:</span>  </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum6" style="color: #606060"> 6:</span>
              <span style="color: #0000ff">public</span>
              <span style="color: #0000ff">static</span>
              <span style="color: #0000ff">int</span> GetCachedRegexCount()</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum7" style="color: #606060"> 7:</span> {</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum8" style="color: #606060"> 8:</span>
              <span style="color: #0000ff">if</span> (_listFieldInfo
== <span style="color: #0000ff">null</span>)</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum9" style="color: #606060"> 9:</span> {</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum10" style="color: #606060"> 10:</span>
              <span style="color: #0000ff">lock</span> (_lockObject)</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum11" style="color: #606060"> 11:</span> {</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum12" style="color: #606060"> 12:</span>
              <span style="color: #0000ff">if</span> (_listFieldInfo
== <span style="color: #0000ff">null</span>)</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum13" style="color: #606060"> 13:</span> {</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum14" style="color: #606060"> 14:</span> _listFieldInfo
= (ICollection)<span style="color: #0000ff">typeof</span>(Regex).GetField(<span style="color: #006080">"livecode"</span>,
BindingFlags.NonPublic | BindingFlags.Static).GetValue(<span style="color: #0000ff">null</span>);</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum15" style="color: #606060"> 15:</span> }</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum16" style="color: #606060"> 16:</span> }</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum17" style="color: #606060"> 17:</span> }</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum18" style="color: #606060"> 18:</span>  </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum19" style="color: #606060"> 19:</span>
              <span style="color: #0000ff">return</span> _listFieldInfo.Count;</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum20" style="color: #606060"> 20:</span> }</pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none">
              <span id="lnum21" style="color: #606060"> 21:</span> }</pre>
            <!--CRLF-->
          </div>
        </div>
        <p>
 
</p>
        <p>
Ist ganz nützlich, wenn man prüfen will ob die gewählte Cachsize sinnvoll ist.
</p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8" />
      </body>
      <title>Anzahl der gecachten Regular Expressions ermitteln</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8.aspx</guid>
      <link>http://blog.dotnet-expert.de/2009/05/04/AnzahlDerGecachtenRegularExpressionsErmitteln.aspx</link>
      <pubDate>Mon, 04 May 2009 11:55:23 GMT</pubDate>
      <description>&lt;p&gt;
Da in der Firma, für die ich arbeite, sehr viele Regular Expressions verwendet werden
und wir auch sehr viele mit der Option “Compiled” versehen, ist es interessant zu
wissen wie viele Regex denn gecached sind. Leider habe ich keine Möglichkeit gefunden,
die Anzahl ohne Reflection zu ermitteln. Über diesen weg sollte es jedoch ziemlich
performant sein:
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum1" style="color: #606060"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; RegexHelper&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum2" style="color: #606060"&gt; 2:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum3" style="color: #606060"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; ICollection
_listFieldInfo;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum4" style="color: #606060"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;readonly&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt; _lockObject
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff"&gt;object&lt;/span&gt;();&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum5" style="color: #606060"&gt; 5:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum6" style="color: #606060"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetCachedRegexCount()&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum7" style="color: #606060"&gt; 7:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum8" style="color: #606060"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (_listFieldInfo
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum9" style="color: #606060"&gt; 9:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum10" style="color: #606060"&gt; 10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;lock&lt;/span&gt; (_lockObject)&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum11" style="color: #606060"&gt; 11:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum12" style="color: #606060"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (_listFieldInfo
== &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum13" style="color: #606060"&gt; 13:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum14" style="color: #606060"&gt; 14:&lt;/span&gt; _listFieldInfo
= (ICollection)&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Regex).GetField(&lt;span style="color: #006080"&gt;"livecode"&lt;/span&gt;,
BindingFlags.NonPublic | BindingFlags.Static).GetValue(&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum15" style="color: #606060"&gt; 15:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum16" style="color: #606060"&gt; 16:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum17" style="color: #606060"&gt; 17:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum18" style="color: #606060"&gt; 18:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum19" style="color: #606060"&gt; 19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _listFieldInfo.Count;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum20" style="color: #606060"&gt; 20:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;&lt;span id="lnum21" style="color: #606060"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Ist ganz nützlich, wenn man prüfen will ob die gewählte Cachsize sinnvoll ist.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,3fb7bcb2-434e-4d0d-89b6-b9e1b9ba25e8.aspx</comments>
      <category>Regex</category>
    </item>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=dd5d5447-b230-4bbe-8447-40842b440c63</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,dd5d5447-b230-4bbe-8447-40842b440c63.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,dd5d5447-b230-4bbe-8447-40842b440c63.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=dd5d5447-b230-4bbe-8447-40842b440c63</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Heut habe ich mir die Änderungen bezüglich branching und merging des kommenden Releases
von Visual Studio und Team Foundation Server angesehen. Dafür habe ich ein altes Projekt
zum TFS hinzugefügt und 2 Branches erstellt:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_2.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="212" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb.png" width="195" border="0" />
          </a>
        </p>
        <p>
Wie man dem obigen Screenshot entnehmen kann, sind mit dem neuen Release nun Branches
mit speziellen Icons versehen. Vor dem erstem Branchen sollte man jedoch den initialen
Zweig extra in einen Branch konvertieren (erst dann sieht man das Icon und Changeset-Tracking
ist möglich):
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_4.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="86" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_1.png" width="361" border="0" />
          </a>
        </p>
        <p>
Ist dies getan, kann man nun z.Bsp. auf einzelne Changesets ein Tracking aktivieren.
D.h. man kann nachvollziehen in welche Branches das Changeset gemerged wurde. In meinem
Beispiel hab ich im Branch "SerializerTest" drei Changesets erzeugt und mache nun
ein "View History" auf den Branch wo man bei jedem Changeset die Möglichkeit hat dieses
zu tracken:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_6.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="168" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_2.png" width="422" border="0" />
          </a>
        </p>
        <p>
Man kann dort nun wählen an welchen Branches man interessiert ist und sieht in der
Grafik rechts auch gleich deren Abhängigkeiten:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_8.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="378" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_3.png" width="424" border="0" />
          </a>
        </p>
        <p>
Man wird danach in den Timeline View geleitet, wo man sieht wann das Changeset (hier
das Changeset 84) in welchen Branch gemerged wurde. Über den mit einen Pfeil markierten
Toolbarbutton gelangt man in den "Hierarchy View" in dem man sehr schön sieht wie
die Bäume von einander abhängig sind.
</p>
        <table cellspacing="0" cellpadding="2" width="741" border="0">
          <tbody>
            <tr>
              <td valign="top" width="422">
                <strong>Timeline View</strong>
              </td>
              <td valign="top" width="317">
                <strong>Hierarchy View</strong>
                <br />
              </td>
            </tr>
            <tr>
              <td valign="top" width="425">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_16.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="255" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_7.png" width="414" border="0" />
                </a>
              </td>
              <td valign="top" width="317">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_18.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="256" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_8.png" width="308" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
Man sieht, dass dieses Changeset noch nicht in die 2 anderen Branches gemerged wurde.
In beiden Views hat man die Möglichkeit mit einem Rechtsklick auf das Changeset, dieses
in einen anderen Branch zu mergen:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_20.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_9.png" width="244" border="0" />
          </a>
        </p>
        <p>
Nach dem Mergen in den Trunk ändern sich die Grafiken der beiden Views entsprechend:
</p>
        <table cellspacing="0" cellpadding="2" width="741" border="0">
          <tbody>
            <tr>
              <td valign="top" width="422">
                <strong>Timeline View</strong>
              </td>
              <td valign="top" width="317">
                <strong>Hierarchy View</strong>
                <br />
              </td>
            </tr>
            <tr>
              <td valign="top" width="425">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_22.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="259" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_10.png" width="394" border="0" />
                </a>
              </td>
              <td valign="top" width="317">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_26.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="257" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_12.png" width="327" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
Nach dem Merge in den finalen Freischaltungs Branch sieht es dann so aus: 
</p>
        <table cellspacing="0" cellpadding="2" width="741" border="0">
          <tbody>
            <tr>
              <td valign="top" width="422">
                <strong>Timeline View</strong>
              </td>
              <td valign="top" width="317">
                <strong>Hierarchy View</strong>
                <br />
              </td>
            </tr>
            <tr>
              <td valign="top" width="425">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_28.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="280" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_13.png" width="396" border="0" />
                </a>
              </td>
              <td valign="top" width="317">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_30.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="260" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_14.png" width="336" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
          <br />
Ein Blick auf die History der gemergten Datei im FirstRelease Branch zeigt, dass die
History nun auch in der Lage ist die Branchvorgänge abzubilden:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_32.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="223" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_15.png" width="755" border="0" />
          </a>
        </p>
        <p>
Aber das war noch nicht alles, die für mich sinnvollste Sache ist, dass man das Tracking
auch auf Workitemebene aktivieren kann. D.h. wenn man mehrere Checkins einem Workitem
zugewiesen hat, kann man nach verfolgen welche Changesets sich in welchen Branches
befinden und welche noch fehlen. Dazu kann man mit einem Klick auf "Track Work Item"
die zuvor dargestellten Ansichten für alle Changesets anzeigen lassen die dem Workitem
zugewiesen sind:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_36.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="300" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_17.png" width="759" border="0" />
          </a>
        </p>
        <p>
Hier die beiden Ansichten:
</p>
        <table cellspacing="0" cellpadding="2" width="741" border="0">
          <tbody>
            <tr>
              <td valign="top" width="422">
                <strong>Timeline View</strong>
              </td>
              <td valign="top" width="317">
                <strong>Hierarchy View</strong>
                <br />
              </td>
            </tr>
            <tr>
              <td valign="top" width="425">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_38.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="261" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_18.png" width="394" border="0" />
                </a>
              </td>
              <td valign="top" width="317">
                <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_44.png">
                  <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="263" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_21.png" width="331" border="0" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
 
</p>
        <p>
Soweit ich es sehe, sind Branches die hier grün hinterlegt sind vollständig gemerged,
heißt alle Changesets sind in diesem Branch vorhanden. Branches die orange hinterlegt
sind fehlt mind. 1 Changeset. Dem Aufmerksamen Leser sollte nun auffallen, dass in
der Grafik oben im Text "Changset 84,85,86" steht, jedoch ist vom Changeset 86 nichts
in beiden Grafiken zu sehen. Entweder versteh ich das Feature nicht komplett oder
das Feature ist einfach noch buggy. Ich tippe darauf, dass das Feature noch buggy
ist. Ich habe zum Testen das Changeset 86 vom Workitem entfernt, dann hätte eigentlich
der Trunk-Branch auch grün sein müssen, war er jedoch auch nicht. Hier scheint noch
etwas Nacharbeit nötig zu sein.
</p>
        <p>
Man kann übrigens auch einfach per Drag &amp; Drop ein Changeset von einem Branch
in den anderen mergen, einfach ein Changeset in einen der beiden Views markieren und
in den gewünschten Branch ziehen. Übrigens der Merge-Dialog ist nun nicht mehr modal
und wurde in die Pending Chanages integriert und heißt dort nun "Pending Changes -
Conflicts". Dateien die nicht automatisch gemerged werden konnten schlagen nun dort
auf und man hat wesentlich mehr Möglichkeiten als vorher und bekommt auch wesentlich
mehr Informationen zu den Problem geboten:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_48.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="231" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_23.png" width="517" border="0" />
          </a>
        </p>
        <p>
Leider hatte ich bei diesem einfachen Szenario keine Konflikte zu bewältigen, deshalb
kann ich hier kein Beispiel zeigen. Dafür erstelle ich eventuell später noch ein extra
Post.
</p>
        <p>
Das war nun ein kleiner Ausblick was uns in Zukunft in Sachen Branching und Merging
erwartet. Ich find die Änderungen super, da man nun viel besser verfolgen kann, welche
Änderungen sich wo befinden.
</p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=dd5d5447-b230-4bbe-8447-40842b440c63" />
      </body>
      <title>Branching und Merging mit VS 2010 und TFS 2010</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,dd5d5447-b230-4bbe-8447-40842b440c63.aspx</guid>
      <link>http://blog.dotnet-expert.de/2009/01/06/BranchingUndMergingMitVS2010UndTFS2010.aspx</link>
      <pubDate>Tue, 06 Jan 2009 18:08:29 GMT</pubDate>
      <description>&lt;p&gt;
Heut habe ich mir die Änderungen bezüglich branching und merging des kommenden Releases
von Visual Studio und Team Foundation Server angesehen. Dafür habe ich ein altes Projekt
zum TFS hinzugefügt und 2 Branches erstellt:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="212" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb.png" width="195" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Wie man dem obigen Screenshot entnehmen kann, sind mit dem neuen Release nun Branches
mit speziellen Icons versehen. Vor dem erstem Branchen sollte man jedoch den initialen
Zweig extra in einen Branch konvertieren (erst dann sieht man das Icon und Changeset-Tracking
ist möglich):
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="86" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_1.png" width="361" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Ist dies getan, kann man nun z.Bsp. auf einzelne Changesets ein Tracking aktivieren.
D.h. man kann nachvollziehen in welche Branches das Changeset gemerged wurde. In meinem
Beispiel hab ich im Branch "SerializerTest" drei Changesets erzeugt und mache nun
ein "View History" auf den Branch wo man bei jedem Changeset die Möglichkeit hat dieses
zu tracken:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="168" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_2.png" width="422" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Man kann dort nun wählen an welchen Branches man interessiert ist und sieht in der
Grafik rechts auch gleich deren Abhängigkeiten:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="378" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_3.png" width="424" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Man wird danach in den Timeline View geleitet, wo man sieht wann das Changeset (hier
das Changeset 84) in welchen Branch gemerged wurde. Über den mit einen Pfeil markierten
Toolbarbutton gelangt man in den "Hierarchy View" in dem man sehr schön sieht wie
die Bäume von einander abhängig sind.
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="741" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="422"&gt;
&lt;strong&gt;Timeline View&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;strong&gt;Hierarchy View&lt;/strong&gt;
&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="425"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="255" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_7.png" width="414" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_18.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="256" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_8.png" width="308" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
Man sieht, dass dieses Changeset noch nicht in die 2 anderen Branches gemerged wurde.
In beiden Views hat man die Möglichkeit mit einem Rechtsklick auf das Changeset, dieses
in einen anderen Branch zu mergen:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_20.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_9.png" width="244" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Nach dem Mergen in den Trunk ändern sich die Grafiken der beiden Views entsprechend:
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="741" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="422"&gt;
&lt;strong&gt;Timeline View&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;strong&gt;Hierarchy View&lt;/strong&gt;
&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="425"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_22.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="259" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_10.png" width="394" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_26.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="257" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_12.png" width="327" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
Nach dem Merge in den finalen Freischaltungs Branch sieht es dann so aus: 
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="741" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="422"&gt;
&lt;strong&gt;Timeline View&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;strong&gt;Hierarchy View&lt;/strong&gt;
&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="425"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_28.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="280" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_13.png" width="396" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_30.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="260" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_14.png" width="336" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&lt;br&gt;
Ein Blick auf die History der gemergten Datei im FirstRelease Branch zeigt, dass die
History nun auch in der Lage ist die Branchvorgänge abzubilden:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_32.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="223" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_15.png" width="755" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Aber das war noch nicht alles, die für mich sinnvollste Sache ist, dass man das Tracking
auch auf Workitemebene aktivieren kann. D.h. wenn man mehrere Checkins einem Workitem
zugewiesen hat, kann man nach verfolgen welche Changesets sich in welchen Branches
befinden und welche noch fehlen. Dazu kann man mit einem Klick auf "Track Work Item"
die zuvor dargestellten Ansichten für alle Changesets anzeigen lassen die dem Workitem
zugewiesen sind:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_36.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="300" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_17.png" width="759" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Hier die beiden Ansichten:
&lt;/p&gt;
&lt;table cellspacing="0" cellpadding="2" width="741" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="422"&gt;
&lt;strong&gt;Timeline View&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;strong&gt;Hierarchy View&lt;/strong&gt;
&lt;br&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="425"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_38.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="261" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_18.png" width="394" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;td valign="top" width="317"&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_44.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="263" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_21.png" width="331" border="0"&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Soweit ich es sehe, sind Branches die hier grün hinterlegt sind vollständig gemerged,
heißt alle Changesets sind in diesem Branch vorhanden. Branches die orange hinterlegt
sind fehlt mind. 1 Changeset. Dem Aufmerksamen Leser sollte nun auffallen, dass in
der Grafik oben im Text "Changset 84,85,86" steht, jedoch ist vom Changeset 86 nichts
in beiden Grafiken zu sehen. Entweder versteh ich das Feature nicht komplett oder
das Feature ist einfach noch buggy. Ich tippe darauf, dass das Feature noch buggy
ist. Ich habe zum Testen das Changeset 86 vom Workitem entfernt, dann hätte eigentlich
der Trunk-Branch auch grün sein müssen, war er jedoch auch nicht. Hier scheint noch
etwas Nacharbeit nötig zu sein.
&lt;/p&gt;
&lt;p&gt;
Man kann übrigens auch einfach per Drag &amp;amp; Drop ein Changeset von einem Branch
in den anderen mergen, einfach ein Changeset in einen der beiden Views markieren und
in den gewünschten Branch ziehen. Übrigens der Merge-Dialog ist nun nicht mehr modal
und wurde in die Pending Chanages integriert und heißt dort nun "Pending Changes -
Conflicts". Dateien die nicht automatisch gemerged werden konnten schlagen nun dort
auf und man hat wesentlich mehr Möglichkeiten als vorher und bekommt auch wesentlich
mehr Informationen zu den Problem geboten:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_48.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="231" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/BranchingundMergingmitVS2010undTFS2010_FC4C/image_thumb_23.png" width="517" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Leider hatte ich bei diesem einfachen Szenario keine Konflikte zu bewältigen, deshalb
kann ich hier kein Beispiel zeigen. Dafür erstelle ich eventuell später noch ein extra
Post.
&lt;/p&gt;
&lt;p&gt;
Das war nun ein kleiner Ausblick was uns in Zukunft in Sachen Branching und Merging
erwartet. Ich find die Änderungen super, da man nun viel besser verfolgen kann, welche
Änderungen sich wo befinden.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=dd5d5447-b230-4bbe-8447-40842b440c63" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,dd5d5447-b230-4bbe-8447-40842b440c63.aspx</comments>
      <category>TFS</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=99905f3a-8b22-4d67-a2c4-635bf48e44b3</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,99905f3a-8b22-4d67-a2c4-635bf48e44b3.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,99905f3a-8b22-4d67-a2c4-635bf48e44b3.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=99905f3a-8b22-4d67-a2c4-635bf48e44b3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Mit Visual Studio 2010 ist es nun endlich möglich den Team Foundation Server auch
Shelvesets builden zu lassen.
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb.png" width="244" border="0" />
          </a>
        </p>
        <p>
Über "Queue New Build" ^^ kommt man in den veränderten Queue Build Dialog:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_4.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="399" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_1.png" width="373" border="0" />
          </a>
        </p>
        <p>
Dort hat man die Wahl zwischen 2 Optionen
</p>
        <ul>
          <li>
Latest source 
</li>
          <li>
Latest source with shelveset</li>
        </ul>
        <p>
Mit der ersten Option wird der neueste Quellcodestand genommen und damit der Build
ausgeführt (die einzigste Option früher). Mit der zweiten Option hat man die Möglichkeit
ein bestimmtes Shelveset zu builden:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_6.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="472" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_2.png" width="381" border="0" />
          </a>
        </p>
        <p>
Wie man am obigen Screenshot sehen kann, hat man die Möglichkeit ein vorhandenes Shelveset
über den Button "..." zu wählen oder mit Hilfe des Buttons "Create" ein neues Shelveset
aus den Pending Changes zu erzeugen und dieses zu builden:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_8.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="318" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_3.png" width="386" border="0" />
          </a> 
</p>
        <p>
Mit Visual Studio 2008 war das Gleiche nur mit Hilfe von 3rd Party Lösungen möglich.
Ein Beispiel hierfür ist:
</p>
        <ul>
          <li>
            <a href="http://www.buddybuildtool.com/buddybuild" target="_blank">TFS Check-in Validation
Tool</a>
          </li>
        </ul>
        <p>
Ich find das neue Feature sehr sinnvoll, da ich oft an mehreren Task gleichzeitig
arbeite und sehr oft bei einzelnen Checkins nicht weis ob diese den Build brechen
würden oder nicht. In diesem Fall kann ich nun die einzelnen Dateien, welche ich einchecken
möchte shelven und builden lassen. Bei erfolgreichen Build check ich diese dann wirklich
ein.
</p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=99905f3a-8b22-4d67-a2c4-635bf48e44b3" />
      </body>
      <title>Shelvesets durch Team Build builden lassen</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,99905f3a-8b22-4d67-a2c4-635bf48e44b3.aspx</guid>
      <link>http://blog.dotnet-expert.de/2009/01/04/ShelvesetsDurchTeamBuildBuildenLassen.aspx</link>
      <pubDate>Sun, 04 Jan 2009 12:20:15 GMT</pubDate>
      <description>&lt;p&gt;
Mit Visual Studio 2010 ist es nun endlich möglich den Team Foundation Server auch
Shelvesets builden zu lassen.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb.png" width="244" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Über "Queue New Build" ^^ kommt man in den veränderten Queue Build Dialog:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="399" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_1.png" width="373" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Dort hat man die Wahl zwischen 2 Optionen
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Latest source 
&lt;li&gt;
Latest source with shelveset&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Mit der ersten Option wird der neueste Quellcodestand genommen und damit der Build
ausgeführt (die einzigste Option früher). Mit der zweiten Option hat man die Möglichkeit
ein bestimmtes Shelveset zu builden:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="472" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_2.png" width="381" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Wie man am obigen Screenshot sehen kann, hat man die Möglichkeit ein vorhandenes Shelveset
über den Button "..." zu wählen oder mit Hilfe des Buttons "Create" ein neues Shelveset
aus den Pending Changes zu erzeugen und dieses zu builden:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="318" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ShelvesetsdurchTeamBuildbuildenlassen_D8D1/image_thumb_3.png" width="386" border="0"&gt;&lt;/a&gt;&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Mit Visual Studio 2008 war das Gleiche nur mit Hilfe von 3rd Party Lösungen möglich.
Ein Beispiel hierfür ist:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.buddybuildtool.com/buddybuild" target="_blank"&gt;TFS Check-in Validation
Tool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Ich find das neue Feature sehr sinnvoll, da ich oft an mehreren Task gleichzeitig
arbeite und sehr oft bei einzelnen Checkins nicht weis ob diese den Build brechen
würden oder nicht. In diesem Fall kann ich nun die einzelnen Dateien, welche ich einchecken
möchte shelven und builden lassen. Bei erfolgreichen Build check ich diese dann wirklich
ein.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=99905f3a-8b22-4d67-a2c4-635bf48e44b3" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,99905f3a-8b22-4d67-a2c4-635bf48e44b3.aspx</comments>
      <category>TFS</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=66fc7b70-2f08-4523-92cd-3e88f7602e2f</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,66fc7b70-2f08-4523-92cd-3e88f7602e2f.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,66fc7b70-2f08-4523-92cd-3e88f7602e2f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=66fc7b70-2f08-4523-92cd-3e88f7602e2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Da ich jetzt mal ein wenig Zeit habe, nutze ich diese um mir das CTP Release von VS
2010 mal etwas näher anzusehen. Das erste was mir positiv auffällt ist, dass jetzt
unter den Project-Alerts auch der Punkt "My build completes" aufgenommen wurde. Heißt:
Man kann sich jetzt auch nur noch benachrichtigen lassen, wenn ein Build, den man
selber z.Bsp. durch einen Checkin ausgelöst hat,  abgeschlossen bzw. fehlgeschlagen
ist:
</p>
        <p>
          <a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ProjectAlertsinVS2010_D4E2/image_2.png">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ProjectAlertsinVS2010_D4E2/image_thumb.png" width="546" border="0" />
          </a>
        </p>
        <p>
Ich hab mir schon einiges von VS 2010 angesehen und ich glaube das Release wird ein
sehr gutes Release. In diesem Release scheint sehr viel auf Kundenfeedback gehört
wurden zu sein. Sieht nach einem guten Usability-Release aus. <img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" /></p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=66fc7b70-2f08-4523-92cd-3e88f7602e2f" />
      </body>
      <title>Project Alerts in VS 2010</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,66fc7b70-2f08-4523-92cd-3e88f7602e2f.aspx</guid>
      <link>http://blog.dotnet-expert.de/2008/12/31/ProjectAlertsInVS2010.aspx</link>
      <pubDate>Wed, 31 Dec 2008 13:17:07 GMT</pubDate>
      <description>&lt;p&gt;
Da ich jetzt mal ein wenig Zeit habe, nutze ich diese um mir das CTP Release von VS
2010 mal etwas näher anzusehen. Das erste was mir positiv auffällt ist, dass jetzt
unter den Project-Alerts auch der Punkt "My build completes" aufgenommen wurde. Heißt:
Man kann sich jetzt auch nur noch benachrichtigen lassen, wenn ein Build, den man
selber z.Bsp. durch einen Checkin ausgelöst hat,&amp;nbsp; abgeschlossen bzw. fehlgeschlagen
ist:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ProjectAlertsinVS2010_D4E2/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="image" src="http://blog.dotnet-expert.de/content/binary/WindowsLiveWriter/ProjectAlertsinVS2010_D4E2/image_thumb.png" width="546" border="0"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Ich hab mir schon einiges von VS 2010 angesehen und ich glaube das Release wird ein
sehr gutes Release. In diesem Release scheint sehr viel auf Kundenfeedback gehört
wurden zu sein. Sieht nach einem guten Usability-Release aus. &lt;img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=66fc7b70-2f08-4523-92cd-3e88f7602e2f" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,66fc7b70-2f08-4523-92cd-3e88f7602e2f.aspx</comments>
      <category>TFS</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="2">Da ich derzeit ein größeres Projekt plane und vor habe dieses Projekt
mit ASP:Net MVC umzusetzen, stoße ich ab und zu auf Dinge die mir in der Default-Implementierung
nicht so passen und versuche dann dafür Lösungen zu finden. Da ich in dem neuen Projekt
ASP.Net MVC und ASP.Net WebForms kombinieren werde empfinde ich es als wichtig, dass
es eine gute Projekt-Struktur gibt.</font>
        </p>
        <p>
          <strong>
            <font size="2">Die Standard-Struktur ist folgende:</font>
          </strong>
        </p>
        <p>
          <font size="2">Project-Root</font>
        </p>
        <ul>
          <li>
            <font size="2">Controllers </font>
          </li>
          <li>
            <font size="2">Models </font>
          </li>
          <li>
            <font size="2">Views</font>
          </li>
        </ul>
        <p>
 <br /><strong><font size="2">Mein Ziel:</font></strong></p>
        <p>
          <font size="2">Project-Root</font>
        </p>
        <blockquote>
          <p>
            <font size="2">MVC</font>
          </p>
          <ul>
            <li>
              <font size="2">Controllers </font>
            </li>
            <li>
              <font size="2">Models </font>
            </li>
            <li>
              <font size="2">Views</font>
            </li>
          </ul>
        </blockquote>
        <p>
          <strong>
            <font size="2">
              <br />
Was brauchen wir Dafür?:</font>
          </strong>
        </p>
        <ul>
          <li>
            <font size="2">Eine eigene <em>ControllerFactory</em></font>
          </li>
          <li>
            <font size="2">Einen eigenen <em>ViewLocator</em></font>
          </li>
        </ul>
        <p>
          <strong>
            <font size="2">
              <br />
ViewLocator-Source:</font>
          </strong>
        </p>
        <div style="font-size: 10pt; background: white; color: black; font-family: courier new">
          <pre style="margin: 0px">
            <span style="color: blue">using</span> System.Web.Mvc;</pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">
            <span style="color: blue">namespace</span> PPM.BusinessLayer.Web.MVC</pre>
          <pre style="margin: 0px">{</pre>
          <pre style="margin: 0px">    <span style="color: blue">public</span><span style="color: blue">class</span><span style="color: #2b91af">PPMViewLocator</span> : <span style="color: #2b91af">ViewLocator</span></pre>
          <pre style="margin: 0px">    {</pre>
          <pre style="margin: 0px">        <span style="color: blue">public</span> PPMViewLocator()</pre>
          <pre style="margin: 0px">        {</pre>
          <pre style="margin: 0px">            ViewLocationFormats = <span style="color: blue">new</span>[] </pre>
          <pre style="margin: 0px">            {</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/{1}/{0}.aspx"</span>,</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/{1}/{0}.ascx"</span>,</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/Shared/{0}.aspx"</span>,</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/Shared/{0}.ascx"</span></pre>
          <pre style="margin: 0px">            };</pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">            MasterLocationFormats = <span style="color: blue">new</span>[] </pre>
          <pre style="margin: 0px">            {</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/{1}/{0}.master"</span>,</pre>
          <pre style="margin: 0px">              <span style="color: #a31515">"~/MVC/Views/Shared/{0}.master"</span></pre>
          <pre style="margin: 0px">            };</pre>
          <pre style="margin: 0px">        }</pre>
          <pre style="margin: 0px">    }</pre>
          <pre style="margin: 0px">}</pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">
            <font face="Verdana">Der
Platzhalter {1} wird später durch den Controller-Name ersetzt und der Platzhalter
{0} wird später durch den View-Name ersetzt.</font>
          </pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">
            <strong>
              <font face="Verdana">ControllerFactory-Source:</font>
            </strong>
          </pre>
        </div>
        <p>
        </p>
        <div style="font-size: 10pt; background: white; color: black; font-family: courier new">
          <pre style="margin: 0px">
            <span style="color: blue">using</span> System.Web.Mvc;</pre>
          <pre style="margin: 0px">
            <span style="color: blue">using</span> System.Web.Routing;</pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">
            <span style="color: blue">namespace</span> PPM.BusinessLayer.Web.MVC</pre>
          <pre style="margin: 0px">{</pre>
          <pre style="margin: 0px">    <span style="color: blue">public</span><span style="color: blue">class</span><span style="color: #2b91af">PPMControllerFactory</span> : <span style="color: #2b91af">DefaultControllerFactory</span></pre>
          <pre style="margin: 0px">    {</pre>
          <pre style="margin: 0px">        <span style="color: blue">protected</span><span style="color: blue">override</span><span style="color: #2b91af">IController</span> CreateController(<span style="color: #2b91af">RequestContext</span> requestContext, <span style="color: blue">string</span> controllerName)</pre>
          <pre style="margin: 0px">        {</pre>
          <pre style="margin: 0px">            <span style="color: #2b91af">Controller</span> controller
= (<span style="color: #2b91af">Controller</span>)<span style="color: blue">base</span>.CreateController(requestContext,
controllerName);</pre>
          <pre style="margin: 0px">            ((<span style="color: #2b91af">WebFormViewEngine</span>)
controller.ViewEngine).ViewLocator = <span style="color: blue">new</span><span style="color: #2b91af">PPMViewLocator</span>();</pre>
          <pre style="margin: 0px"> </pre>
          <pre style="margin: 0px">            <span style="color: blue">return</span> controller;</pre>
          <pre style="margin: 0px">        }</pre>
          <pre style="margin: 0px">    }</pre>
          <pre style="margin: 0px">}</pre>
        </div>
        <p>
        </p>
        <p>
          <font size="2">Hier leiten wir von der <em>DefaultControllerFactory</em> ab und überschreiben
die <em>CreateController</em> Methode. In der Methode lassen wir die Basis den Controller
erzeugen und setzen bei der <em>ViewEngine</em> des erzeugten Controller den <em>ViewLocator</em> auf
unseren eigenen <em>ViewLocator</em>. Nun fehlt nur noch der Code zum registrieren
unser eigenen <em>ControllerFactory. </em>Dies erreicht man indem man in der <strong>Global.asax</strong> in
der Methode <strong>Application_Start</strong> die neue <em>ControllerFactory</em> setzt:</font>
        </p>
        <div style="font-size: 10pt; background: white; color: black; font-family: courier new">
          <div style="font-size: 10pt; background: white; color: black; font-family: courier new">
            <pre style="margin: 0px">
              <span style="color: blue">protected</span>
              <span style="color: blue">void</span> Application_Start()</pre>
            <pre style="margin: 0px">{</pre>
            <pre style="margin: 0px">    RegisterRoutes(<span style="color: #2b91af">RouteTable</span>.Routes);</pre>
            <pre style="margin: 0px"> </pre>
            <pre style="margin: 0px">    <span style="color: green">//
plug in our custom controller factory to replace the default view locator</span></pre>
            <pre style="margin: 0px">    <span style="color: #2b91af">ControllerBuilder</span>.Current.SetControllerFactory(<span style="color: blue">typeof</span>(<span style="color: #2b91af">PPMControllerFactory</span>));</pre>
            <pre style="margin: 0px">}</pre>
          </div>
          <p>
          </p>
        </div>
        <p>
          <font size="2">Das wars</font>
          <img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" />
        </p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd" />
      </body>
      <title>Implementieren eines eigenen ViewLocators für ASP.Net MVC</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd.aspx</guid>
      <link>http://blog.dotnet-expert.de/2008/07/22/ImplementierenEinesEigenenViewLocatorsF%c3%bcrASPNetMVC.aspx</link>
      <pubDate>Tue, 22 Jul 2008 19:48:08 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size="2"&gt;Da ich derzeit ein größeres Projekt plane und vor habe dieses Projekt
mit ASP:Net MVC umzusetzen, stoße ich ab und zu auf Dinge die mir in der Default-Implementierung
nicht so passen und versuche dann dafür Lösungen zu finden. Da ich in dem neuen Projekt
ASP.Net MVC und ASP.Net WebForms kombinieren werde empfinde ich es als wichtig, dass
es eine gute Projekt-Struktur gibt.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="2"&gt;Die Standard-Struktur ist folgende:&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;Project-Root&lt;/font&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font size="2"&gt;Controllers &lt;/font&gt; 
&lt;li&gt;
&lt;font size="2"&gt;Models &lt;/font&gt; 
&lt;li&gt;
&lt;font size="2"&gt;Views&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&amp;nbsp;&lt;br&gt;
&lt;strong&gt;&lt;font size="2"&gt;Mein Ziel:&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;Project-Root&lt;/font&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font size="2"&gt;MVC&lt;/font&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font size="2"&gt;Controllers &lt;/font&gt; 
&lt;li&gt;
&lt;font size="2"&gt;Models &lt;/font&gt; 
&lt;li&gt;
&lt;font size="2"&gt;Views&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;&lt;font size="2"&gt;
&lt;br&gt;
Was brauchen wir Dafür?:&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font size="2"&gt;Eine eigene &lt;em&gt;ControllerFactory&lt;/em&gt; &lt;/font&gt; 
&lt;li&gt;
&lt;font size="2"&gt;Einen eigenen &lt;em&gt;ViewLocator&lt;/em&gt;&lt;/font&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;&lt;font size="2"&gt;
&lt;br&gt;
ViewLocator-Source:&lt;/font&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; PPM.BusinessLayer.Web.MVC&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PPMViewLocator&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ViewLocator&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; PPMViewLocator()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewLocationFormats = &lt;span style="color: blue"&gt;new&lt;/span&gt;[] &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/{1}/{0}.aspx"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/{1}/{0}.ascx"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/Shared/{0}.aspx"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/Shared/{0}.ascx"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterLocationFormats = &lt;span style="color: blue"&gt;new&lt;/span&gt;[] &lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/{1}/{0}.master"&lt;/span&gt;,&lt;/pre&gt;&lt;pre style="margin: 0px"&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; &lt;span style="color: #a31515"&gt;"~/MVC/Views/Shared/{0}.master"&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;font face="Verdana"&gt;Der
Platzhalter {1} wird später durch den Controller-Name ersetzt und der Platzhalter
{0} wird später durch den View-Name ersetzt.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;strong&gt;&lt;font face="Verdana"&gt;ControllerFactory-Source:&lt;/font&gt;&lt;/strong&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Web.Mvc;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Web.Routing;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; PPM.BusinessLayer.Web.MVC&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PPMControllerFactory&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;DefaultControllerFactory&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;override&lt;/span&gt; &lt;span style="color: #2b91af"&gt;IController&lt;/span&gt; CreateController(&lt;span style="color: #2b91af"&gt;RequestContext&lt;/span&gt; requestContext, &lt;span style="color: blue"&gt;string&lt;/span&gt; controllerName)&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin: 0px"&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="color: #2b91af"&gt;Controller&lt;/span&gt; controller
= (&lt;span style="color: #2b91af"&gt;Controller&lt;/span&gt;)&lt;span style="color: blue"&gt;base&lt;/span&gt;.CreateController(requestContext,
controllerName);&lt;/pre&gt;&lt;pre style="margin: 0px"&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="color: #2b91af"&gt;WebFormViewEngine&lt;/span&gt;)
controller.ViewEngine).ViewLocator = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;PPMViewLocator&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&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="color: blue"&gt;return&lt;/span&gt; controller;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size="2"&gt;Hier leiten wir von der &lt;em&gt;DefaultControllerFactory&lt;/em&gt; ab und überschreiben
die &lt;em&gt;CreateController&lt;/em&gt; Methode. In der Methode lassen wir die Basis den Controller
erzeugen und setzen bei der &lt;em&gt;ViewEngine&lt;/em&gt; des erzeugten Controller den &lt;em&gt;ViewLocator&lt;/em&gt; auf
unseren eigenen &lt;em&gt;ViewLocator&lt;/em&gt;. Nun fehlt nur noch der Code zum registrieren
unser eigenen &lt;em&gt;ControllerFactory. &lt;/em&gt;Dies erreicht man indem man in der &lt;strong&gt;Global.asax&lt;/strong&gt; in
der Methode &lt;strong&gt;Application_Start&lt;/strong&gt; die neue &lt;em&gt;ControllerFactory&lt;/em&gt; setzt:&lt;/font&gt;
&lt;/p&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;
&lt;div style="font-size: 10pt; background: white; color: black; font-family: courier new"&gt;&lt;pre style="margin: 0px"&gt;&lt;span style="color: blue"&gt;protected&lt;/span&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Application_Start()&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;{&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RegisterRoutes(&lt;span style="color: #2b91af"&gt;RouteTable&lt;/span&gt;.Routes);&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green"&gt;//
plug in our custom controller factory to replace the default view locator&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af"&gt;ControllerBuilder&lt;/span&gt;.Current.SetControllerFactory(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;PPMControllerFactory&lt;/span&gt;));&lt;/pre&gt;&lt;pre style="margin: 0px"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;font size="2"&gt;Das wars&lt;/font&gt; &lt;img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,5ef8fb7c-62fa-439a-9b3c-c1c86d3d99dd.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://blog.dotnet-expert.de/Trackback.aspx?guid=7e8b39aa-114b-4eac-9ea3-d8d88910a239</trackback:ping>
      <pingback:server>http://blog.dotnet-expert.de/pingback.aspx</pingback:server>
      <pingback:target>http://blog.dotnet-expert.de/PermaLink,guid,7e8b39aa-114b-4eac-9ea3-d8d88910a239.aspx</pingback:target>
      <dc:creator>Your DisplayName here!</dc:creator>
      <wfw:comment>http://blog.dotnet-expert.de/CommentView,guid,7e8b39aa-114b-4eac-9ea3-d8d88910a239.aspx</wfw:comment>
      <wfw:commentRss>http://blog.dotnet-expert.de/SyndicationService.asmx/GetEntryCommentsRss?guid=7e8b39aa-114b-4eac-9ea3-d8d88910a239</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Da bei meinem Server in den letzten Wochen immer mehr und mehr Probleme aufgetreten
sind, hatte ich mich heute Morgen dazu entschlossen meinen Server neu zu installieren.
Bei der Gelegenheit habe ich auch gleiche das Betriebssystem von Windows 2003 auf
Windows 2008 gewechselt.
</p>
        <p>
Leider ist durch die Probleme der letzten Zeit ein Problem untergegangen - Es wurden
keine Datenbank-Backups mehr erstellt. Als ich nun freudestrahlend alles installiert
hatte und meine Datenbank-Backups einspielen wollte, musste ich feststellen, dass
alles  weg war <img alt="Crying" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/cry_smile.gif" />.
</p>
        <p>
Somit ist die Datenbank meines Community Servers dahin und ich steh ohne Blog da.
Naja, sind zwar alle Blogposts weg, aber ich wollte eh zurück zu "DasBlog".
</p>
        <p>
Ich hoffe mal nicht, dass ich noch mehr Überraschungen beim Wiederherstellen meines
Server's erlebe <img alt="Disappointed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/what_smile.gif" />.
</p>
        <p>
Grüße,<br />
Jens
</p>
        <img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=7e8b39aa-114b-4eac-9ea3-d8d88910a239" />
      </body>
      <title>Neuanfang</title>
      <guid isPermaLink="false">http://blog.dotnet-expert.de/PermaLink,guid,7e8b39aa-114b-4eac-9ea3-d8d88910a239.aspx</guid>
      <link>http://blog.dotnet-expert.de/2008/07/06/Neuanfang.aspx</link>
      <pubDate>Sun, 06 Jul 2008 08:51:37 GMT</pubDate>
      <description>&lt;p&gt;
Da bei meinem Server in den letzten Wochen immer mehr und mehr Probleme aufgetreten
sind, hatte ich mich heute Morgen dazu entschlossen meinen Server neu zu installieren.
Bei der Gelegenheit habe ich auch gleiche das Betriebssystem von Windows 2003 auf
Windows 2008 gewechselt.
&lt;/p&gt;
&lt;p&gt;
Leider ist durch die Probleme der letzten Zeit ein Problem untergegangen - Es wurden
keine Datenbank-Backups mehr erstellt. Als ich nun freudestrahlend alles installiert
hatte und meine Datenbank-Backups einspielen wollte, musste ich feststellen, dass
alles&amp;nbsp; weg war &lt;img alt="Crying" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/cry_smile.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
Somit ist die Datenbank meines Community Servers dahin und ich steh ohne Blog da.
Naja, sind zwar alle Blogposts weg, aber ich wollte eh zurück zu "DasBlog".
&lt;/p&gt;
&lt;p&gt;
Ich hoffe mal nicht, dass ich noch mehr Überraschungen beim Wiederherstellen meines
Server's erlebe &lt;img alt="Disappointed" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/what_smile.gif"&gt;.
&lt;/p&gt;
&lt;p&gt;
Grüße,&lt;br&gt;
Jens
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.dotnet-expert.de/aggbug.ashx?id=7e8b39aa-114b-4eac-9ea3-d8d88910a239" /&gt;</description>
      <comments>http://blog.dotnet-expert.de/CommentView,guid,7e8b39aa-114b-4eac-9ea3-d8d88910a239.aspx</comments>
    </item>
  </channel>
</rss>