<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5439084187135612209</id><updated>2011-11-23T21:25:01.747+01:00</updated><category term='Wpf Encounter'/><category term='ccnet vnext'/><category term='Cradiator'/><category term='CI'/><category term='CCNet'/><category term='customizing code'/><category term='buildscripts'/><category term='ToDo'/><title type='text'>RuWi</title><subtitle type='html'>Postings about CCNet, a continuous Integration Server written in C#.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-2442031220445973357</id><published>2011-09-26T07:47:00.012+02:00</published><updated>2011-09-27T22:21:04.767+02:00</updated><title type='text'>Setting up CCNet in combination with VS2010</title><content type='html'>In this post I'll describe how one can set up CCNet to work with VS2010. Not everyone has the full blown version of TFS at their disposal. &lt;br /&gt;&lt;h4&gt;Scenario setup&lt;/h4&gt;I always use the following setup at work :&lt;ul&gt;&lt;li&gt; Project_CI : for Continuous Integration (compile, unit-test)&lt;/li&gt;&lt;li&gt;Project_MakePackage :  this  makes the install package (compile, unit-test,integration-test, make package)&lt;/li&gt;&lt;li&gt;Project_QA : this does unit-test, integration_test, coverage and code analysis.&lt;/li&gt;&lt;/ul&gt;This is a pragmatic approach: a 'fix' can be deployed even when for example coverage is still below X percent, as long as all tests are passed. It's convention that QA must be fixed ASAP!  &lt;br /&gt;&lt;br /&gt;The &lt;b&gt;CI&lt;/b&gt; must be as fast as possible, so it runs only the unit-tests.  The CI project has an &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Interval_Trigger"&gt;interval trigger&lt;/a&gt; checking the repo every 5 minutes. This project does NOT label TFS.&lt;br /&gt;&lt;br /&gt;The makePackage project has a &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Schedule_Trigger"&gt;schedule trigger&lt;/a&gt; : every day at 20:00, and a labeler so we can easily branch via a label.&lt;br /&gt;&lt;br /&gt;The QA project also has a &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Schedule_Trigger"&gt;schedule trigger&lt;/a&gt; : every day at 21:00. This project does NOT label TFS.&lt;br /&gt;&lt;h4&gt;Step 1 : Setting up the source control part&lt;/h4&gt;&lt;br /&gt;In Tfs itself I have the following layout :&lt;pre&gt;&lt;br /&gt;&lt;i&gt;ProjectName&lt;/i&gt;&lt;br /&gt;  \__&lt;i&gt;Main&lt;/i&gt;&lt;br /&gt;  |    \Lib&lt;br /&gt;  |    \Src&lt;br /&gt;  \__Releases&lt;br /&gt;       \__&lt;i&gt;1_0_0_3450&lt;/i&gt;&lt;br /&gt;       |  \Lib&lt;br /&gt;       |  \Src&lt;br /&gt;       \__&lt;i&gt;1_0_1_5678&lt;/i&gt;&lt;br /&gt;          \Lib&lt;br /&gt;          \Src&lt;/pre&gt;This allows for easy branching.&lt;br /&gt;&lt;h4&gt;Step 2 : Setting up CCNet.config&lt;/h4&gt;I use the &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Configuration_Preprocessor"&gt;pre-processor&lt;/a&gt; to reduce a lot of the configuration. This allows me to define a CCNet project in just 30 lines! &lt;br /&gt;You can read the full configuration for the tfs source control at the wiki &lt;a href="http://www.cruisecontrolnet.org/projects/ccnet/wiki/Team_Foundation_Server_%28Tfs%29"&gt;Tfs Source Control&lt;/a&gt;&lt;br /&gt;My advise : set the deleteworkspace and cleancopy to true, this prevents a lot of problems.&lt;br /&gt;A full example of ccnet.config with comparable layout is at the bottom of this post. &lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;The preprocessor declaration :&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts_ci&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;http://tfs-server:8080/tfs/default/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;cruise&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;**********&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;tfs-server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;The source control block inside a project :&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(ProjectName)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$/$(ProjectName)/Main&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:vsts_ci&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;h4&gt;Step 3 : Setting up the build script&lt;/h4&gt;&lt;br /&gt;The main action lays of course in the build script, for which I use &lt;a href="http://nant.sourceforge.net/"&gt;Nant&lt;/a&gt;. The reason I (still) use Nant is that I know it rather well, and it works. For compiling I just call the MSBuild task from &lt;a href="http://nantcontrib.sourceforge.net"&gt;NantContrib&lt;/a&gt; pointing to the VS2010 solution, but all other logic is in Nant.&lt;br /&gt;An example of the Nant build script is also at the bottom of this post.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Step 4 : Testing with Ms-test&lt;/h4&gt;&lt;br /&gt;Like I said in the beginning, I have 2 kind of tests, UnitTests and Integration Tests. In MS-test I create a test-list with the name &lt;b&gt;&lt;i&gt;UnitTests&lt;/i&gt;&lt;/b&gt; directly under the root item. All tests in this list, and in test-lists beneath it will be ran when I specify &lt;i&gt;UnitTests&lt;/i&gt;. The 'Integration Tests' (slow running ones, going to the database, ...) are in a test-list named &lt;i&gt;IntegrationTests&lt;/i&gt; also directly under the root item. Here's an example of calling MS-Test via nant :&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${mstest_exe}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testmetadata:${mstest_metadatafile}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/resultsfile:MStest_Results.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:UnitTests&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:IntegrationTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${CCNetBuildCondition=='ForceBuild'}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Step 5 : Using Ms-Test with coverage&lt;/h4&gt;&lt;br /&gt;In Ms-test you can specify that you also want coverage to run, see &lt;a href="http://stackoverflow.com/questions/415562/mstest-code-coverage"&gt;for setting it up&lt;/a&gt;.&lt;br /&gt;I just made a company rule that for code coverage to be ran via ccnet, the testsettings file must be named : &lt;i&gt;CodeCoverage.testsettings&lt;/i&gt;, &lt;br /&gt;with a specific base name(cover_me) and no timestamps appended. Just to make things easier for me.&lt;br /&gt;If you want MS-Test to run coverage, just pass the testsettings as an extra argument :&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${mstest_exe}&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;failonerror&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;resultproperty&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;testresult.temp&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testmetadata:${mstest_metadatafile}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/resultsfile:MStest_Results.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testsettings:CodeCoverage.testsettings&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:UnitTests&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:IntegrationTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${CCNetBuildCondition=='ForceBuild'}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;There is a catch : Ms-Test from VS2010 does not produce XML anymore, see this &lt;a href="http://www.codebadger.com/blog/post/2009/05/12/Turning-Visual-Studio-MSTEST-code-coverage-files-into-Xml.aspx"&gt;post for a solution&lt;/a&gt;. You really need the dll from VS2008 for it to work, the VS2010 has another interface sadly enough. So best to digg up you DVD of VS2008. I've updated that program a bit so that is also removes the Lines from the coverage result file, making it a lot smaller to merge. Below is my source code (its VB.Net)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Showing the results&lt;/h4&gt;&lt;br /&gt;I've added 2 new xsl files (MsTestReport2010.xsl and MsTest2010Cover.xsl) to CCNet, you can use these in the dashboard in the build plugins.&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildPlugins&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    ...&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xslReportBuildPlugin &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Ms Test&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;actionName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;MSTest&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xslFileName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;xsl\MsTestReport2010.xsl&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;           &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xslReportBuildPlugin &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;MS Test Coverage&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;actionName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;MSTest2008Cover&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xslFileName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;xsl\MsTestCover2010.xsl&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    ...&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildPlugins&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Attachments&lt;/h4&gt;&lt;br /&gt;&lt;h5&gt;CCNet.config&lt;/h5&gt;&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cruisecontrol &lt;/font&gt;&lt;font color="#800080"&gt;xmlns:cb&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;urn:ccnet.config.builder&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;lt;!-- preprocessor settings --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;WorkingDir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;D:\WorkingFolders\&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;WorkingMainDir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;D:\ArtifactFolders\&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;ArtifactsDir&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;\Artifacts&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts_ci&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;http://tfs-server:8080/tfs/default/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;cruise&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;**********&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;tfs-server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts_package&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;http://tfs-server:8080/tfs/default/&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;cruise&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;username&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;**********&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;password&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;tfs-server&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;domain&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;autoGetSource&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cleanCopy&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;force&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;applyLabel&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;applyLabel&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;deleteWorkspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;common_publishers&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;merge&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;files&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;file&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Coverage.xml&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/file&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;file&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;MStest_Results.xml&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/file&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;file&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;simian.xml&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/file&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;files&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;merge&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xmllogger &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;statistics &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;modificationHistory  &lt;/font&gt;&lt;font color="#800080"&gt;onlyLogWhenChangesFound&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;true&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactcleanup   &lt;/font&gt;&lt;font color="#800080"&gt;cleanUpMethod&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;KeepLastXSubDirs&amp;quot;   &lt;/font&gt;&lt;font color="#800080"&gt;cleanUpValue&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactcleanup   &lt;/font&gt;&lt;font color="#800080"&gt;cleanUpMethod&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;KeepLastXBuilds&amp;quot;    &lt;/font&gt;&lt;font color="#800080"&gt;cleanUpValue&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;25000&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;email &lt;/font&gt;&lt;font color="#800080"&gt;from&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;CruiseControl@TheBuilder.com&amp;quot; &lt;/font&gt;&lt;br /&gt;          &lt;font color="#800080"&gt;mailhost&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TheMailer.Company.com&amp;quot; &lt;/font&gt;&lt;br /&gt;          &lt;font color="#800080"&gt;includeDetails&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TRUE&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;groups&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;users&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;converters&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;ldapConverter &lt;/font&gt;&lt;font color="#800080"&gt;domainName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Company&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;converters&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;modifierNotificationTypes&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;           &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;NotificationType&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Failed&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;NotificationType&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;           &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;NotificationType&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Fixed&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;NotificationType&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;modifierNotificationTypes&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;email&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_common&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;c:\Tools\nant\bin\nant.exe&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;1800&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;-D:useExtraMsbuildLogger=true  -D:isCI=true  -listener:CCNetListener,CCNetListener -D:configuration=Debug&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_package&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;c:\Tools\nant\bin\nant.exe&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;1800&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; -D:useExtraMsbuildLogger=true  -D:CreateInstallZips=true -listener:CCNetListener,CCNetListener -D:configuration=Release&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_qa&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;c:\Tools\nant\bin\nant.exe&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;executable&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;true&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nologo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;3600&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildTimeoutSeconds&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;-D:useExtraMsbuildLogger=true   -listener:CCNetListener,CCNetListener  -D:configuration=DebugCA&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;buildArgs&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_target_CI&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;clean&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;compile&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_target_qa&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;clean&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;simian&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;compile&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;cover&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;nant_target_package&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;clean&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;compile&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;make_package&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;makehelp&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;targetList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:define&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;lt;!-- end preprocessor settings --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#008000"&gt;&amp;lt;!-- Projects --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope &lt;/font&gt;&lt;font color="#800080"&gt;ProjectName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ProjectX&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;ProjectType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;_CI&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;$(ProjectName)$(ProjectType)&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queue&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Q1&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queuePriority&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;901&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingDir)$(ProjectName)$(ProjectType)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingMainDir)$(ProjectName)$(ProjectType)$(ArtifactsDir)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;labeller &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;defaultlabeller&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(ProjectName)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$/$(ProjectName)/Main&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:vsts_ci&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_common&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_target_CI &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:common_publishers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope &lt;/font&gt;&lt;font color="#800080"&gt;ProjectName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ProjectX&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;ProjectType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;_Package&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;$(ProjectName)$(ProjectType)&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queue&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Q1&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queuePriority&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;801&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingDir)$(ProjectName)$(ProjectType)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingMainDir)$(ProjectName)$(ProjectType)$(ArtifactsDir)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;labeller &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;defaultlabeller&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;prefix&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;1.0.1.&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;prefix&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;incrementOnFailure&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;false&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;incrementOnFailure&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;labeller&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(ProjectName)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$/$(ProjectName)/Main&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:vsts_package&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;             &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_package&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_target_package &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:common_publishers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope &lt;/font&gt;&lt;font color="#800080"&gt;ProjectName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ProjectX&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:define &lt;/font&gt;&lt;font color="#800080"&gt;ProjectType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;_QA&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;$(ProjectName)$(ProjectType)&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queue&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Q1&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;queuePriority&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;801&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingDir)$(ProjectName)$(ProjectType)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(WorkingMainDir)$(ProjectName)$(ProjectType)$(ArtifactsDir)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;labeller &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;defaultlabeller&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol &lt;/font&gt;&lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;vsts&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$(ProjectName)&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workspace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$/$(ProjectName)/Main&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:vsts_package&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;             &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;sourcecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_common&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:nant_target_qa &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;nant&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;         &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cb:common_publishers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cb:scope&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cruisecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Nant Build Script&lt;/h5&gt;&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#800080"&gt;default&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;help&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;solution&amp;quot;                           &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${property::exists('solution')}&amp;quot;                            &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ProjectX.sln&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;configuration&amp;quot;                      &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${property::exists('configuration')}&amp;quot;                       &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Debug&amp;quot;   &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;CCNetListenerFile&amp;quot;                  &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${property::exists('CCNetListenerFile')}&amp;quot;                   &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;listen.xml&amp;quot;    &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;msbuildverbose&amp;quot;                     &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${property::exists('msbuildverbose')}&amp;quot;                      &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;normal&amp;quot;             &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;CCNetLabel&amp;quot;                         &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${property::exists('CCNetLabel')}&amp;quot;                          &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0.0.0.0&amp;quot;      &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;mstest_metadatafile&amp;quot;                &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ProjectX.vsmdi&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#800080"&gt;overwrite&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Simian_exe&amp;quot;           &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:\Tools\simian\bin\simian-2.3.32.exe&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#800080"&gt;overwrite&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;msbuildlogger&amp;quot;        &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Program Files\CruiseControl.NET\server\MSBuildListener.dll&amp;quot;                     &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#800080"&gt;overwrite&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;versionInfofile&amp;quot;      &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;VersionInfo.cs&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#800080"&gt;overwrite&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;mstest_exe&amp;quot;           &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- custom scripts --&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;script &lt;/font&gt;&lt;font color="#ff0000"&gt;language&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C#&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;prefix&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;RuWi&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;references&amp;gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#800000"&gt;&amp;lt;include name=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;System.Xml.dll&amp;quot; &lt;/font&gt;&lt;font color="#800000"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#800000"&gt;&amp;lt;include name=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;System.dll&amp;quot; &lt;/font&gt;&lt;font color="#800000"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;/references&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;imports&amp;gt;&lt;/font&gt;&lt;br /&gt;              &lt;font color="#800000"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;import &lt;/font&gt;&lt;font color="#800000"&gt;namespace=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;System.Text&amp;quot; &lt;/font&gt;&lt;font color="#800000"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;/imports&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;code&amp;gt;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#800000"&gt;&amp;lt;![CDATA[&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800000"&gt;[Function(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;UpdateVersionFile&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;)]&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;public static &lt;/font&gt;&lt;font color="#800000"&gt;bool UpdateVersionFile(string inputFile, string newVersion, bool debugMode)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800000"&gt;bool ok = &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#800000"&gt;;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;System.IO.StreamReader versionFile = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#800000"&gt;System.IO.StreamReader(inputFile, System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.Encoding.ASCII);&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;string line = &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;;&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.StringBuilder result = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#800000"&gt;StringBuilder();&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;string searchPatternVersion = @&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;(\d+\.\d+\.\d+\.\d+)&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;;&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;string searchPatternAssemblyProduct = string.Format(@&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AssemblyProduct\({0}(.*?)\{0}&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;);&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;string replacePatternAssemblyProduct = string.Format(@&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AssemblyProduct({0}(Debug)${1}1{2}{0}&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;\&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;{&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;}&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;font color="#0000ff"&gt;while &lt;/font&gt;&lt;font color="#800000"&gt;(!versionFile.EndOfStream)&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;line = versionFile.ReadLine();&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#800000"&gt;(System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.RegularExpressions.Regex.IsMatch(line, searchPatternVersion) &amp;amp;&amp;amp; (line.Contains(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AssemblyFileVersion&amp;quot;&lt;/font&gt;&lt;font color="#800000"&gt;)))&lt;/font&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                                &lt;font color="#800000"&gt;line = System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.RegularExpressions.Regex.Replace(line, searchPatternVersion, newVersion);&lt;/font&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#800000"&gt;(debugMode &amp;amp;&amp;amp; System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.RegularExpressions.Regex.IsMatch(line, searchPatternAssemblyProduct))&lt;/font&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                                &lt;font color="#800000"&gt;line = System.&lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#800000"&gt;.RegularExpressions.Regex.Replace(line, searchPatternAssemblyProduct, replacePatternAssemblyProduct);&lt;/font&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                            &lt;font color="#800000"&gt;result.AppendLine(line);&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;versionFile.Close();&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;System.IO.StreamWriter updatedVersionfile = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#800000"&gt;System.IO.StreamWriter(inputFile);&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;updatedVersionfile.Write(result.ToString());&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;updatedVersionfile.Close();&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;catch &lt;/font&gt;&lt;font color="#800000"&gt;(Exception ex)&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800000"&gt;{&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;ok = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#800000"&gt;;&lt;/font&gt;&lt;br /&gt;                        &lt;font color="#800000"&gt;Console.WriteLine(ex.ToString());&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#800000"&gt;ok;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800000"&gt;}&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800000"&gt;]]&amp;gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#800000"&gt;&amp;lt;/code&amp;gt;&lt;/font&gt;&lt;br /&gt;     &lt;font color="#0000ff"&gt;&amp;lt;/script&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;help&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;echo &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Removed for keeping the file shorter.&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;clean&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;deletes all created files&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;delete &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;fileset&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;patternset &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;**/bin/**&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;**/obj/**&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Coverage*.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;*.zip&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;MStest_Results.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;include &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;simian.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;                   &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;patternset&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;fileset&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;delete&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;adjustversion&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Adjusts the version in the version.info file&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;if &lt;/font&gt;&lt;font color="#800080"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${not file::exists(versionInfofile)}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;fail &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;file: ${versionInfofile}  which must contains the version info was NOT found&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;echo &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Setting version to ${CCNetLabel}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;       &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;debugMode&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;value &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;False&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;debugMode&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;value &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;True&amp;quot;  &lt;/font&gt;&lt;font color="#800080"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${configuration=='Debug'}&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;if &lt;/font&gt;&lt;font color="#800080"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${not RuWi::UpdateVersionFile(versionInfofile,CCNetLabel,debugMode)}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;fail &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;updating file: ${versionInfofile}  which must contains the version info failed&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;compile&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;compiles the solution in the wanted configuration&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;depends&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;adjustversion&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;                         &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;msbuild  &lt;/font&gt;&lt;font color="#800080"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${solution}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/p:Configuration=${configuration}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/p:CCNetListenerFile=${CCNetListenerFile}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/v:${msbuildverbose}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/l:${msbuildlogger}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;msbuild&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;   &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;test&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;runs the tests&amp;quot;    &lt;/font&gt;&lt;font color="#800080"&gt;depends&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;deploy.services&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;if &lt;/font&gt;&lt;font color="#800080"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${string::get-length(mstest_metadatafile)&amp;gt;0}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${mstest_exe}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testmetadata:${mstest_metadatafile}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/resultsfile:MStest_Results.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:UnitTests&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:IntegrationTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${CCNetBuildCondition=='ForceBuild'}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;             &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cover&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;runs the tests with coverage&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;if &lt;/font&gt;&lt;font color="#800080"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${string::get-length(mstest_metadatafile)&amp;gt;0}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;            company rule : code coverage settings must be set via this file &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;            with the following NamingScheme : baseName=&amp;quot;cover_me&amp;quot; appendTimeStamp=&amp;quot;false&amp;quot; useDefault=&amp;quot;false&amp;quot; &lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;        --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;             &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;if &lt;/font&gt;&lt;font color="#800080"&gt;test&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${file::exists('CodeCoverage.testsettings')}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${mstest_exe}&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;failonerror&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;resultproperty&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;testresult.temp&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testmetadata:${mstest_metadatafile}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/resultsfile:MStest_Results.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testsettings:CodeCoverage.testsettings&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:UnitTests&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;/testlist:IntegrationTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${CCNetBuildCondition=='ForceBuild'}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;             &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestsOK&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${int::parse(testresult.temp)==0}&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;DataCoverageFilePath&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${RuWi::FindFile('cover_me','data.coverage')}&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;property &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TurnCoverageFileIntoXml_exe&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Tools\TurnCoverageFileIntoXml\TurnCoverageFileIntoXml.exe&amp;quot;  &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;fail &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;No data.coverage found in cover_me folder&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${string::get-length(DataCoverageFilePath)&amp;gt;0}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;echo &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;DataCoverageFilePath : ${DataCoverageFilePath}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;               &lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${TurnCoverageFileIntoXml_exe}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${DataCoverageFilePath}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cover_me\Out&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;NCoverExplorer.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;fail &lt;/font&gt;&lt;font color="#800080"&gt;message&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Failures reported in unit tests.&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;unless&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${TestsOK}&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;if&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;simian&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;find duplicate code&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;       &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;exec &lt;/font&gt;&lt;font color="#800080"&gt;program&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;${Simian_exe}&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;failonerror&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-includes=**/*.cs&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-excludes=**/*Designer.*&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-excludes=**/*Generated.*&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-excludes=**/*Reference.*&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-excludes=**/obj/*&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-threshold=10&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;arg &lt;/font&gt;&lt;font color="#800080"&gt;value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;-formatter=xml:simian.xml&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;exec&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;target&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;deploy.services&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;deploys all service (web/wcf)&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- company specific, just copies files to the iis folder     --&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;make_package&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;makes install packages&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;           &lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- company specific, creates install packages and zips them  --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;target &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;makehelp&amp;quot; &lt;/font&gt;&lt;font color="#ff0000"&gt;description&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;makes install packages&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;               &lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- company specific, makes user help with custom tool        --&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Source code for Ms-Test binary2Xml&lt;/h5&gt;&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;Imports Microsoft.VisualStudio.CodeCoverage&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Module Module1&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Sub &lt;/font&gt;&lt;font color="#000000"&gt;Main()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;Arguments As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;obc = Console.BackgroundColor&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;returnValue As Integer = &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Arguments = Environment.GetCommandLineArgs&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;Arguments.Length &amp;lt;&amp;gt; &lt;/font&gt;&lt;font color="#800080"&gt;4 &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Console.BackgroundColor = ConsoleColor.Blue&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Usage : {0} DataCoverageFilePath CoveredFilesPath ResultXmlFilePath&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Arguments(&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;))&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Console.BackgroundColor = ConsoleColor.DarkGreen&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot; {0}  In\LTREMRUBEN\data.coverage Out d:\codecover.xml&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Arguments(&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;))&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Console.BackgroundColor = obc&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;returnValue = &lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Exit &lt;/font&gt;&lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;DataCoverageFilePath As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= Arguments(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;CoveredFilesPath As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= Arguments(&lt;/font&gt;&lt;font color="#800080"&gt;2&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;ResultXmlFilePath As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= Arguments(&lt;/font&gt;&lt;font color="#800080"&gt;3&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverageInfoManager.ExePath = CoveredFilesPath&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverageInfoManager.SymPath = CoveredFilesPath&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;converting {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, DataCoverageFilePath)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;coverage = CoverageInfoManager.CreateInfoFromFile(DataCoverageFilePath)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;CoverResult = coverage.BuildDataSet(&lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;CoverResultStream As New IO.MemoryStream&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResult.WriteXml(CoverResultStream)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Initial Size in bytes : {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, CoverResultStream.Length)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResultStream.Position = &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Cleaning up xml info ...&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;CoverResultXmlDoc As New Xml.XmlDocument()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResultXmlDoc.Load(CoverResultStream)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;LineInfos = CoverResultXmlDoc.SelectNodes(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;//Lines&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;For Each &lt;/font&gt;&lt;font color="#000000"&gt;lineInfo As Xml.XmlNode &lt;/font&gt;&lt;font color="#0000ff"&gt;In &lt;/font&gt;&lt;font color="#000000"&gt;LineInfos&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;lineInfo.RemoveAll()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Next&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;SourceFileNameInfos = CoverResultXmlDoc.SelectNodes(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;//SourceFileNames&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;For Each &lt;/font&gt;&lt;font color="#000000"&gt;SourceFileNameInfo As Xml.XmlNode &lt;/font&gt;&lt;font color="#0000ff"&gt;In &lt;/font&gt;&lt;font color="#000000"&gt;SourceFileNameInfos&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;SourceFileNameInfo.RemoveAll()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Next&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResultXmlDoc.PreserveWhitespace = &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResultXmlDoc.Normalize()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;CoverResultXmlDoc.Save(ResultXmlFilePath)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Compressed Size in bytes : {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, New IO.FileInfo(ResultXmlFilePath).Length)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Done.&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Catch ex As Exception&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Console.WriteLine(ex.ToString)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End &lt;/font&gt;&lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;End &lt;/font&gt;&lt;font color="#000000"&gt;Module&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-2442031220445973357?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/2442031220445973357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/setting-up-ccnet-in-combination-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2442031220445973357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2442031220445973357'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/setting-up-ccnet-in-combination-with.html' title='Setting up CCNet in combination with VS2010'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8944082443741754140</id><published>2011-09-10T12:48:00.005+02:00</published><updated>2011-09-10T21:10:37.476+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CCNet'/><title type='text'>Statistics publisher</title><content type='html'>There was an &lt;a href="http://www.cruisecontrolnet.org/issues/7"&gt;issue&lt;/a&gt; that the statistics publisher does not work correctly. Now I know the statistics publisher is an old one, and one where the configuration is rarely altered, besides the 10 standard foreseen statistics.&lt;br /&gt;Gathering extra statistics is not that difficult, add a name for the element, and a XPath expression. For example: &lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;statistic &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AmountOfFailures&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xpath&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;sum(//test-results/@failures)&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;Now this is good when the build log is simple xml, but when you have sections with namespaces, things become nasty.&lt;br /&gt;If you're working with VS2010, and are merging the test results, you have encountered this problem before. These test results are stored in the "http://microsoft.com/schemas/VisualStudio/TeamTest/2010" namespace. &lt;br /&gt;This problem is now fixed, I've added support for namespaces. &lt;br /&gt;&lt;br /&gt;Below you'll find a xmlFile containing test data coming from a demo project, and I'll use this file as an example :&lt;br /&gt;Suppose you want to know the total amount of tests and the amount of failed ones. This information can be retrieved via the following XPath queries : &lt;i&gt;/TestRun/ResultSummary/Counters/@total&lt;/i&gt; and &lt;i&gt;/TestRun/ResultSummary/Counters/@failed&lt;/i&gt; &lt;br /&gt;Because the test-result file is merged into the master buildlog file, the TestRun node is not the root node anymore.&lt;br /&gt;Normally you could/would fix this by changing it into &lt;i&gt;&lt;b&gt;//&lt;/b&gt;TestRun/ResultSummary/Counters/@total&lt;/i&gt;, giving the following config for the statistic :&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;statistic &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AmountOfTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xpath&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;//TestRun/ResultSummary/Counters/@total&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;But this gives &lt;i&gt;MS.Internal.Xml.XPath.XPathSelectionIterator&lt;/i&gt; as result. Not very intuitive if you do not work with XPath every day.The problem is the &lt;b&gt;//&lt;/b&gt; operator, XPath asumes there can be many TestResult nodes in the xmlfile(even if we know there will only be one), and returns an iterator. To bypass this kind of thing, a FirstMatch class was (and still is) foreseen to handle this, resulting in following setting : &lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;firstMatch &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AmountOfTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xpath&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;//TestRun/ResultSummary/Counters/@total&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;But now the result is Null (empty string) in the file. With the support for namespaces, the config is as follows : &lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;firstMatch &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;AmountOfTests&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;xpath&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;//mstest:TestRun/mstest:ResultSummary/mstest:Counters/@total&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;namespaces&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;     &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;namespaceMapping &lt;/font&gt;&lt;font color="#800080"&gt;prefix&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;mstest&amp;quot; &lt;/font&gt;&lt;font color="#800080"&gt;url&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;http://microsoft.com/schemas/VisualStudio/TeamTest/2010&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;namespaces&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;firstMatch&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;Resulting in the wanted result of &lt;b&gt;2&lt;/b&gt; for the file below. This is a huge step forward, but there is still a problem :&lt;br /&gt;suppose you want some statistic with a calculation of a setting with a namespace, and one without a namespace. &lt;br /&gt;This poses a problem with XSLT 1.0, because we can not set a prefix for the default namespace. To overcome that problem we'll have to support XSLT 2.0. where there is functionality foreseen. &lt;br /&gt;&lt;a href="http://www.cruisecontrolnet.org/issues/8"&gt;This request is added on the todo list.&lt;/a&gt;&lt;br /&gt;The test file :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestRun &lt;/font&gt;&lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;32083ab3-68fe-40ab-a13d-c289aef12a28&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cover_me&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#800080"&gt;runUser&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;ruben&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;http://microsoft.com/schemas/VisualStudio/TeamTest/2010&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestSettings &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Cover&amp;quot;&lt;/font&gt;&lt;br /&gt;                  &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;9839cf84-0738-4c12-885d-99158bdda72f&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Description&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;These are default test settings for a local test run.&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Description&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Deployment &lt;/font&gt;&lt;font color="#800080"&gt;userDeploymentRoot&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Users\ruben\Documents\Visual Studio 2010\Projects\CCNetStatistics&amp;quot;&lt;/font&gt;&lt;br /&gt;                  &lt;font color="#800080"&gt;useDefaultDeploymentRoot&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot;&lt;/font&gt;&lt;br /&gt;                  &lt;font color="#800080"&gt;runDeploymentRoot&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cover_me&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;NamingScheme &lt;/font&gt;&lt;font color="#800080"&gt;baseName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cover_me&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;appendTimeStamp&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;useDefault&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;false&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Execution&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestTypeSpecific&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestRunConfig &lt;/font&gt;&lt;font color="#800080"&gt;testTypeId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;AssemblyResolution&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestDirectory &lt;/font&gt;&lt;font color="#800080"&gt;useLoadContext&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;true&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;AssemblyResolution&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestRunConfig&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestTypeSpecific&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;AgentRule &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;LocalMachineDefaultRole&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;DataCollectors&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;DataCollector &lt;/font&gt;&lt;font color="#800080"&gt;uri&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;datacollector://microsoft/CodeCoverage/1.0&amp;quot;&lt;/font&gt;&lt;br /&gt;                           &lt;font color="#800080"&gt;assemblyQualifiedName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;&lt;/font&gt;&lt;br /&gt;                           &lt;font color="#800080"&gt;friendlyName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Code Coverage&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Configuration&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;CodeCoverage &lt;/font&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Regular&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;CodeCoverageItem &lt;/font&gt;&lt;font color="#800080"&gt;binaryFile&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Users\ruben\Documents\Visual Studio 2010\Projects\CCNetStatistics\CCNetStatistics\bin\Debug\Agents.dll&amp;quot;&lt;/font&gt;&lt;br /&gt;                                      &lt;font color="#800080"&gt;pdbFile&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;C:\Users\ruben\Documents\Visual Studio 2010\Projects\CCNetStatistics\CCNetStatistics\bin\Debug\Agents.instr.pdb&amp;quot;&lt;/font&gt;&lt;br /&gt;                                      &lt;font color="#800080"&gt;instrumentInPlace&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;true&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Regular&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;CodeCoverage&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Configuration&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;DataCollector&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;DataCollectors&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;AgentRule&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Execution&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestSettings&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Times &lt;/font&gt;&lt;font color="#800080"&gt;creation&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:22.8989434+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#800080"&gt;queuing&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:24.1937456+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#800080"&gt;start&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:24.3341459+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;           &lt;font color="#800080"&gt;finish&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:28.0469524+02:00&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;ResultSummary &lt;/font&gt;&lt;font color="#800080"&gt;outcome&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Failed&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Counters &lt;/font&gt;&lt;font color="#800080"&gt;total&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;executed&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;passed&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;1&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;error&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;failed&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;1&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;timeout&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;aborted&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;inconclusive&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;passedButRunAborted&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;notRunnable&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;notExecuted&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;disconnected&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;warning&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;completed&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;inProgress&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;pending&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;0&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;ResultFiles&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;ResultFile &lt;/font&gt;&lt;font color="#800080"&gt;path&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;LTREMRUBEN\data.coverage&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;ResultFiles&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;ResultSummary&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestDefinitions&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;UnitTest &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestInfiltration&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;storage&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:\users\ruben\documents\visual studio 2010\projects\ccnetstatistics\testagents\bin\debug\testagents.dll&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;93fe6bec-7340-59e7-ba45-0a396dc614ff&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Execution &lt;/font&gt;&lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;792491ae-0c70-45e3-a474-1f1cb130226b&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestMethod &lt;/font&gt;&lt;font color="#800080"&gt;codeBase&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:/users/ruben/documents/visual studio 2010/projects/ccnetstatistics/testagents/bin/debug/TestAgents.DLL&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;adapterTypeName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;className&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestAgents.UnitTest1, TestAgents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestInfiltration&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;UnitTest&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;UnitTest &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestReport&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;storage&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:\users\ruben\documents\visual studio 2010\projects\ccnetstatistics\testagents\bin\debug\testagents.dll&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;09504e3d-ea5f-fda7-5ee0-32f8cc895784&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Execution &lt;/font&gt;&lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c98799b7-8675-43b9-ae03-7eb7fd2acb70&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestMethod &lt;/font&gt;&lt;font color="#800080"&gt;codeBase&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:/users/ruben/documents/visual studio 2010/projects/ccnetstatistics/testagents/bin/debug/TestAgents.DLL&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;adapterTypeName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;className&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestAgents.UnitTest1, TestAgents, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestReport&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;UnitTest&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestDefinitions&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestLists&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestList &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Smoke&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;39ed6b71-dbd6-41f1-a30d-eebe96ec74ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;parentListId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;8c43106b-9dc1-4907-a29f-aa66a61bf5b6&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestLinks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestLink &lt;/font&gt;&lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;93fe6bec-7340-59e7-ba45-0a396dc614ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestInfiltration&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;storage&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:\users\ruben\documents\visual studio 2010\projects\ccnetstatistics\testagents\bin\debug\testagents.dll&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestLink &lt;/font&gt;&lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;09504e3d-ea5f-fda7-5ee0-32f8cc895784&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestReport&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#800080"&gt;storage&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c:\users\ruben\documents\visual studio 2010\projects\ccnetstatistics\testagents\bin\debug\testagents.dll&amp;quot;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#ff0000"&gt;type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestLinks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestList &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Lists of Results&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;8c43106b-9dc1-4907-a29f-aa66a61bf5b6&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestList &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;All Loaded Results&amp;quot;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#800080"&gt;id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;19431567-8539-422a-85d7-44ee4e166bda&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestLists&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestEntries&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestEntry &lt;/font&gt;&lt;font color="#800080"&gt;testId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;93fe6bec-7340-59e7-ba45-0a396dc614ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                 &lt;font color="#800080"&gt;executionId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;792491ae-0c70-45e3-a474-1f1cb130226b&amp;quot;&lt;/font&gt;&lt;br /&gt;                 &lt;font color="#800080"&gt;testListId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;39ed6b71-dbd6-41f1-a30d-eebe96ec74ff&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;TestEntry &lt;/font&gt;&lt;font color="#800080"&gt;testId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;09504e3d-ea5f-fda7-5ee0-32f8cc895784&amp;quot;&lt;/font&gt;&lt;br /&gt;                 &lt;font color="#800080"&gt;executionId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c98799b7-8675-43b9-ae03-7eb7fd2acb70&amp;quot;&lt;/font&gt;&lt;br /&gt;                 &lt;font color="#800080"&gt;testListId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;39ed6b71-dbd6-41f1-a30d-eebe96ec74ff&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestEntries&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Results&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestResult &lt;/font&gt;&lt;font color="#800080"&gt;executionId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;792491ae-0c70-45e3-a474-1f1cb130226b&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;93fe6bec-7340-59e7-ba45-0a396dc614ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestInfiltration&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;computerName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;LTREMRUBEN&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;duration&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;00:00:00.0342893&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;startTime&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:25.9721488+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;endTime&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:26.3777495+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;outcome&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Passed&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testListId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;39ed6b71-dbd6-41f1-a30d-eebe96ec74ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;relativeResultsDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;792491ae-0c70-45e3-a474-1f1cb130226b&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestResult&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestResult &lt;/font&gt;&lt;font color="#800080"&gt;executionId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c98799b7-8675-43b9-ae03-7eb7fd2acb70&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;09504e3d-ea5f-fda7-5ee0-32f8cc895784&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;TestReport&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;computerName&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;LTREMRUBEN&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;duration&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;00:00:00.0538581&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;startTime&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:26.4089495+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;endTime&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;2011-09-04T20:40:26.4713496+02:00&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;outcome&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Failed&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;testListId&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;39ed6b71-dbd6-41f1-a30d-eebe96ec74ff&amp;quot;&lt;/font&gt;&lt;br /&gt;                      &lt;font color="#800080"&gt;relativeResultsDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;c98799b7-8675-43b9-ae03-7eb7fd2acb70&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Output&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;ErrorInfo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;Message&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Assert.AreEqual failed. Expected:&lt;/font&gt;&lt;font color="#008080"&gt;&amp;amp;lt;&amp;amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;. Actual:&lt;/font&gt;&lt;font color="#008080"&gt;&amp;amp;lt;&lt;/font&gt;&lt;font color="#000000"&gt;all went ok&lt;/font&gt;&lt;font color="#008080"&gt;&amp;amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;. &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Message&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;StackTrace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;              at TestAgents.UnitTest1.TestReport() in c:\users\ruben\documents\visual studio 2010\Projects\CCNetStatistics\TestAgents\UnitTest1.vb:line 17&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;StackTrace&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;          &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;ErrorInfo&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Output&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;UnitTestResult&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;Results&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;TestRun&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8944082443741754140?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8944082443741754140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/statistics-publisher.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8944082443741754140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8944082443741754140'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/statistics-publisher.html' title='Statistics publisher'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-5332368261552125777</id><published>2011-09-07T20:05:00.002+02:00</published><updated>2011-09-07T20:13:57.570+02:00</updated><title type='text'>New site for CCNet</title><content type='html'>As you may have read, we moved away from Thoughtworks hosting to another server :&lt;br /&gt;&lt;quote&gt;&lt;br /&gt;After years of good collaboration with Thoughtworks, it appeared that Thoughtworks had less resources to spent for CCNet.&lt;br /&gt;This problem came painfully visible when their site was hacked with a virus. It took a long time for the help page to come back up, and the build server is still not up.&lt;br /&gt;&lt;br /&gt;Some months ago we (the active members) decided to move the hosting to another server, so we would be less dependent on Thoughtworks. No hard feelings, it were great years of cooperation but time moved on.&lt;br /&gt;&lt;br /&gt;The reason it took a few months to set everything up was due to lack of time of us. Communication could have been better, but we're all doing this (maintaining CCNet) in our own free time, without getting paid. Hopefully this downtime will not happen again.&lt;br /&gt;&lt;br /&gt;The license of CCNet is still the same as it was before the move, we just moved the build server and the documentation site, everything else stays the same till further notice :-)&lt;br /&gt;The move to the new site also has some plus points :&lt;br /&gt;&lt;br /&gt;    we can update / alter the site at any time.&lt;br /&gt;    there is 1 site for the wiki, bug reports and forum (before there was Jira and Confluence, no forum) meaning 1 user and password&lt;br /&gt;    a Linux build server is also up and running, meaning more Mono compatibility.&lt;br /&gt;    moved from svn to Git, which should make it a lot easier for people to contribute.&lt;br /&gt;    Chili has some options that Jira did not have : Calendar, Gantt chart, ....&lt;br /&gt;&lt;br /&gt;Now lets get CCNet back in the picture, stay tuned for more news.&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;This server is provided by Daniel Nauck, so I owe him a lot for this !&lt;br /&gt;Now we have a build server back :-)&lt;br /&gt;&lt;br /&gt;It seems that the build is broken, so we need to fix that asap, and continue to update the new documentation wiki. When this is done, we can start to update CCNet like before.&lt;br /&gt;&lt;br /&gt;Keeping you posted ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-5332368261552125777?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/5332368261552125777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/new-site-for-ccnet.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/5332368261552125777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/5332368261552125777'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/09/new-site-for-ccnet.html' title='New site for CCNet'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-9127222665833297859</id><published>2011-07-12T16:28:00.017+02:00</published><updated>2011-07-12T18:51:48.047+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='customizing code'/><title type='text'>Yet another trigger : installTrigger</title><content type='html'>At work I use CCNet for 2 main different things :&lt;br /&gt;° as Continuous Integration : compile, test, package, code statistics, ...&lt;br /&gt;° as Continuous Installation : install our software at the customers site ( &lt;a href="http://rubenwillems.blogspot.com/search/label/CI"&gt;see articles&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;For the installation part, I previously changed the ccnet.config to reflect the needed changes. For example change the requested time of a schedule trigger, add the names of the server(s) where to install or not to install the software.&lt;br /&gt;Now this works great, but it is error prone!&lt;br /&gt;Remember ccnet.config is the core configuration of CCNet, a typo there could stop the service. And reviving it is not fun, remember I have a small 100 servers to maintain!! &lt;br /&gt;&lt;br /&gt;So the idea came for a new trigger, to remove the parts that change a lot in ccnet.config to another file. Just moving to another file is not enough though, if there is an error in that file, ccnet may not crash. Meaning that using the pre-processor or XML-Entities is out of the question.&lt;br /&gt;&lt;br /&gt;Now I already have an xml file for each customer, that holds what software the customer has, what sql server settings are needed, where the software needs to come, ....&lt;br /&gt;&lt;br /&gt;Meaning this trigger should just read this xml file, and return the needed things.&lt;br /&gt;I just needed to add the wanted integration time and wanted version to this file, to get it to work.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The new trigger is the InstallTrigger (cool name actually) and is a copy of the schedule trigger with the following extra parts :&lt;br /&gt;° CheckInstallationNeededForProgramToInstall (the name of the program as known in the xml file)&lt;br /&gt;° DeploySettingFilePath : where the xml file is located&lt;br /&gt;° CruiseInstallProject : the corresponding CCNet project name that does the installation (more on this later)&lt;br /&gt;° UpdateDeploySettingsProject : Name of CCNet project that downloads updated xml files from the ftp site&lt;br /&gt;° removed the Time property, as this will come from the xml file&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The most important things of the code :&lt;br /&gt;° at start, get the wanted datetime of the xml file, if the date is before today, copy the time part to todays date&lt;br /&gt;° when an integration is done, and the installation failed, get the wanted datetime from the xmlfile, but add 1 day (re-schedule automatically). &lt;br /&gt;° when an integration is done, and the installation was ok, return datetime.maxvalue&lt;br /&gt;° when the UpdateDeploySettingsProject ran, re-read the xml file.&lt;br /&gt;° use datetime.utcNow iso dateTime.Now, this is a LOT faster (&lt;a href="http://www.eggheadcafe.com/software/aspnet/33208684/performance-hit-because-of-datetimenow.aspx"&gt;look here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now why I added the CruiseInstallProject property?&lt;br /&gt;One could easily say that this is not needed, because the trigger is inside the project that will install the requested software.&lt;br /&gt;Wrong bet :-)&lt;br /&gt;Remember a previous post : &lt;a href="http://rubenwillems.blogspot.com/2010/08/continous-installation-forcing-multiple.html"&gt;forcing multiple builds at once&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So when I want to install, let's say Bookkeeping, also our security module (for login and so) needs to be installed.&lt;br /&gt;So I have the following CCNet projects :&lt;font color="#330000"&gt;&lt;table border="1" celpadding="2" bgcolor="#ccffcc" &gt; &lt;tr&gt; &lt;th&gt;CCNetProjectName&lt;/th&gt; &lt;th&gt;InstallTrigger property cruiseInstallProject&lt;/th&gt; &lt;th&gt;Tasks&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;InstallSecurity&lt;/td&gt; &lt;td&gt;InstallSecurity&lt;/td&gt; &lt;td&gt;install security program&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;InstallBookKeeping&lt;/td&gt; &lt;td&gt;&lt;/td&gt; &lt;td&gt;install bookkeeping program&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;FullInstallBookkeeping&lt;/td&gt; &lt;td&gt;InstallBookKeeping&lt;/td&gt; &lt;td&gt;&lt;ol&gt;&lt;li&gt;ForceBuild InstallSecurity&lt;/li&gt;&lt;li&gt;ForceBuild InstallBookKeeping&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt;&lt;/font&gt;&lt;br /&gt;This makes it a lot safer to do the installations, and even gives us an easy way to schedule the same program at different dates/times for different customers. &lt;br /&gt;It is the same CCNet project, just the xml file for the involved customer needs to change.&lt;br /&gt;&lt;br /&gt;Below is the code of the InstallTrigger.&lt;br /&gt;&lt;table bgcolor="#ffffff"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Imports Exortech.NetReflector&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Imports ThoughtWorks.CruiseControl.Remote&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Imports ThoughtWorks.CruiseControl.Core.Config&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Imports System.Globalization&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;Imports ThoughtWorks.CruiseControl.Core.Util&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;lt;ReflectorType(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;installTrigger&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;Public Class &lt;/font&gt;&lt;font color="#000000"&gt;InstallTrigger&lt;/font&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;Implements ITrigger&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;m_name As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;dtProvider As DateTimeProvider&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;m_nextBuild As DateTime = DateTime.MinValue&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;m_previousBuild As DateTime&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;triggered As Boolean&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_includeServerNames As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_excludeServerNames As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_serverConfig As Data.DeploySetting = &lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_requestedInstallDate As DateTime = DateTime.MaxValue&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_cruiseInstallProject As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= &lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_cruiseInstallProjectStateFile As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_updateDeploySettingsStateFile As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_UpdateDeploySettingsVersion As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_UpdateDeploySettingsProject As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;UpdateDeploySettings&amp;quot;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_UpdateDeploySettingsProjectLastTimeChecked As DateTime&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_integrationDone As Boolean&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_ServerNameIsOk As Boolean&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Sub &lt;/font&gt;&lt;font color="#000000"&gt;New()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Me.New(New DateTimeProvider())&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Sub &lt;/font&gt;&lt;font color="#000000"&gt;New(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;dtProvider As DateTimeProvider)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Me.dtProvider = dtProvider&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorArray(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;includeServerNames&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;IncludeServerNames() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return _includeServerNames&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;())&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_includeServerNames = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorArray(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;excludeServerNames&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;ExcludeServerNames() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return _excludeServerNames&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;())&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_excludeServerNames = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;name&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;Name() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;m_name &lt;/font&gt;&lt;font color="#0000ff"&gt;Is Nothing Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;m_name = [GetType]().Name&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return m_name&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;m_name = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;buildCondition&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public &lt;/font&gt;&lt;font color="#000000"&gt;BuildCondition As BuildCondition = BuildCondition.IfModificationExists&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorArray(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;weekDays&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public &lt;/font&gt;&lt;font color="#000000"&gt;WeekDays As DayOfWeek() = DirectCast(DayOfWeek.GetValues(GetType(DayOfWeek)), DayOfWeek())&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_checkInstallationNeededForProgramToInstall As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private &lt;/font&gt;&lt;font color="#000000"&gt;_deploySettingFilePath As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;D:\InstallPath&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;checkInstallationNeededForProgramToInstall&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;CheckInstallationNeededForProgramToInstall() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return Me._checkInstallationNeededForProgramToInstall&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Me._checkInstallationNeededForProgramToInstall = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;deploySettingFilePath&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;DeploySettingFilePath() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return Me._deploySettingFilePath&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Me._deploySettingFilePath = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;updateDeploySettingsProject&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;UpdateDeploySettingsProject() As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return Me._UpdateDeploySettingsProject&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Me._UpdateDeploySettingsProject = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;&amp;lt;ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;cruiseInstallProject&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, required:=&lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;font color="#000000"&gt;)&amp;gt; _&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;CruiseInstallProject As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return _cruiseInstallProject&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Set&lt;/font&gt;&lt;font color="#000000"&gt;(value As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_cruiseInstallProject = value&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Set&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Sub &lt;/font&gt;&lt;font color="#000000"&gt;SetNextIntegrationDateTime()&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#ff0000"&gt;now &lt;/font&gt;&lt;font color="#000000"&gt;As DateTime = dtProvider.&lt;/font&gt;&lt;font color="#ff0000"&gt;Now&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;m_nextBuild = RequestedInstallDateTime()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;m_nextBuild = DateTime.MaxValue &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#ff0000"&gt;now &lt;/font&gt;&lt;font color="#000000"&gt;&amp;gt;= m_nextBuild OrElse &lt;/font&gt;&lt;font color="#ff0000"&gt;now&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#ff0000"&gt;Date &lt;/font&gt;&lt;font color="#000000"&gt;= m_previousBuild.&lt;/font&gt;&lt;font color="#ff0000"&gt;Date &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;m_nextBuild = m_nextBuild.AddDays(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;m_nextBuild = CalculateNextIntegrationTime(m_nextBuild)&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;CalculateNextIntegrationTime(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;nextIntegration As DateTime) As DateTime&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;While True&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;IsValidWeekDay(nextIntegration.DayOfWeek) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Exit While&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;nextIntegration = nextIntegration.AddDays(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End While&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return nextIntegration&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;IsValidWeekDay(&lt;/font&gt;&lt;font color="#0000ff"&gt;ByVal &lt;/font&gt;&lt;font color="#000000"&gt;nextIntegrationDay As DayOfWeek) As Boolean&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#ff0000"&gt;Array&lt;/font&gt;&lt;font color="#000000"&gt;.IndexOf(WeekDays, nextIntegrationDay) &amp;gt;= &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public &lt;/font&gt;&lt;font color="#000000"&gt;Overridable &lt;/font&gt;&lt;font color="#0000ff"&gt;Sub &lt;/font&gt;&lt;font color="#000000"&gt;IntegrationCompleted() Implements ITrigger.IntegrationCompleted&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#ff0000"&gt;now &lt;/font&gt;&lt;font color="#000000"&gt;As DateTime = dtProvider.&lt;/font&gt;&lt;font color="#ff0000"&gt;Now&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;triggered &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;m_previousBuild = &lt;/font&gt;&lt;font color="#ff0000"&gt;now&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'to force a re-read of the deploymentsettings file after X seconds.&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'State file does not seem to be updated yet&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_UpdateDeploySettingsProjectLastTimeChecked = DateTime.UtcNow&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_integrationDone = &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;triggered = &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public &lt;/font&gt;&lt;font color="#000000"&gt;ReadOnly &lt;/font&gt;&lt;font color="#0000ff"&gt;Property &lt;/font&gt;&lt;font color="#000000"&gt;NextBuild() As DateTime Implements ITrigger.NextBuild&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;m_nextBuild = DateTime.MinValue &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#008000"&gt;'first time initialise&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;FirstTimeInitialize()&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;_ServerNameIsOk &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util.&lt;/font&gt;&lt;font color="#ff0000"&gt;Log&lt;/font&gt;&lt;font color="#000000"&gt;.Debug(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Loading deploysettings file &amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;_serverConfig = New Data.DeploySetting(DeploySettingFilePath)&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;SetNextIntegrationDateTime()&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If Not &lt;/font&gt;&lt;font color="#000000"&gt;_ServerNameIsOk &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return DateTime.MaxValue&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'to keep watching the deploy settings file after a second 'Fire'&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;isDeploySettingsFileIsUpdated() &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util.&lt;/font&gt;&lt;font color="#ff0000"&gt;Log&lt;/font&gt;&lt;font color="#000000"&gt;.Debug(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Re-loading deploysettings file&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;_serverConfig = New Data.DeploySetting(DeploySettingFilePath)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;SetNextIntegrationDateTime()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return m_nextBuild&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End Get&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Property&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Public Function &lt;/font&gt;&lt;font color="#000000"&gt;Fire() As IntegrationRequest Implements ITrigger.Fire&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#ff0000"&gt;now &lt;/font&gt;&lt;font color="#000000"&gt;As DateTime = dtProvider.&lt;/font&gt;&lt;font color="#ff0000"&gt;Now&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#ff0000"&gt;now &lt;/font&gt;&lt;font color="#000000"&gt;&amp;gt; NextBuild AndAlso IsValidWeekDay(&lt;/font&gt;&lt;font color="#ff0000"&gt;now&lt;/font&gt;&lt;font color="#000000"&gt;.DayOfWeek) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;triggered = &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return New IntegrationRequest(BuildCondition, Name)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;ServerNameIsOk() As Boolean&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;includeServersSpecified As Boolean = IncludeServerNames IsNot &lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing &lt;/font&gt;&lt;font color="#000000"&gt;AndAlso IncludeServerNames.Length &amp;gt; &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;excludeServersSpecified As Boolean = ExcludeServerNames IsNot &lt;/font&gt;&lt;font color="#0000ff"&gt;Nothing &lt;/font&gt;&lt;font color="#000000"&gt;AndAlso ExcludeServerNames.Length &amp;gt; &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;includeServersSpecified &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;For Each &lt;/font&gt;&lt;font color="#000000"&gt;srv &lt;/font&gt;&lt;font color="#0000ff"&gt;In &lt;/font&gt;&lt;font color="#000000"&gt;IncludeServerNames&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;srv.Equals(System.Net.Dns.GetHostName, StringComparison.CurrentCultureIgnoreCase) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;srv.Equals(System.Environment.MachineName, StringComparison.CurrentCultureIgnoreCase) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Next&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;excludeServersSpecified &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;For Each &lt;/font&gt;&lt;font color="#000000"&gt;srv &lt;/font&gt;&lt;font color="#0000ff"&gt;In &lt;/font&gt;&lt;font color="#000000"&gt;ExcludeServerNames&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;srv.Equals(System.Net.Dns.GetHostName, StringComparison.CurrentCultureIgnoreCase) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;srv.Equals(System.Environment.MachineName, StringComparison.CurrentCultureIgnoreCase) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Next&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;RequestedInstallDateTime() As DateTime&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;CCNetInfo = GetInfoFromCCNetStateFile(_cruiseInstallProjectStateFile)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;LastSucessFullLabel = CCNetInfo.LastSucessFullLabel&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;projectVersion As Version&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;.IsNullOrEmpty(LastSucessFullLabel) OrElse &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;.Equals(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;unknown&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, LastSucessFullLabel, StringComparison.CurrentCultureIgnoreCase) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;projectVersion = New Version(&lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Else&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;projectVersion = New Version(LastSucessFullLabel)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'specific company code to get the data from the config, can not post this :-(&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'dummy code folows&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;progInfo = _serverConfig.GetInfo(CheckInstallationNeededForProgramToInstall)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'end dummy code&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;projectVersion &amp;lt; progInfo.WantedVersion &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;progInfo.WantedFrom.&lt;/font&gt;&lt;font color="#ff0000"&gt;Date &lt;/font&gt;&lt;font color="#000000"&gt;&amp;lt; &lt;/font&gt;&lt;font color="#ff0000"&gt;Now&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#ff0000"&gt;Date &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                     &lt;font color="#008000"&gt;'should the server be down for some time or so&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;_requestedInstallDate = &lt;/font&gt;&lt;font color="#ff0000"&gt;Now&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#ff0000"&gt;Date&lt;/font&gt;&lt;font color="#000000"&gt;.AddHours(availableApplication.WantedFrom.&lt;/font&gt;&lt;font color="#ff0000"&gt;Hour&lt;/font&gt;&lt;font color="#000000"&gt;).AddMinutes(availableApplication.WantedFrom.&lt;/font&gt;&lt;font color="#ff0000"&gt;Minute&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Else&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;_requestedInstallDate = progInfo.WantedFrom&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;_integrationDone &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#008000"&gt;'if installation failed, re-schedule it for the next day at the same time, giving us a day to investigate,&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#008000"&gt;'otherwise try again for temporary errors&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;If Not &lt;/font&gt;&lt;font color="#000000"&gt;CCNetInfo.IsSuccesfull &lt;/font&gt;&lt;font color="#0000ff"&gt;Then &lt;/font&gt;&lt;font color="#000000"&gt;_requestedInstallDate = _requestedInstallDate.AddDays(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;_integrationDone = &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Else&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;_requestedInstallDate = DateTime.MaxValue&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Catch ex As Exception&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'on error, just set it to not scheduled&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_requestedInstallDate = DateTime.MaxValue&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;ei = &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;.Format(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Error in RequestedInstallDateTime : {0} &amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, ex.ToString)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util.&lt;/font&gt;&lt;font color="#ff0000"&gt;Log&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;Error&lt;/font&gt;&lt;font color="#000000"&gt;(ei)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;EventLog.WriteEntry(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;CCNet-InstallTrigger&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, ei, EventLogEntryType.&lt;/font&gt;&lt;font color="#0000ff"&gt;Error&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End &lt;/font&gt;&lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return _requestedInstallDate&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;GetInfoFromCCNetStateFile(cruiseProjectStateFile As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;font color="#000000"&gt;) As StateFileInfo&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;result As New StateFileInfo&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;IO.File.Exists(cruiseProjectStateFile) &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;stateFileContents As &lt;/font&gt;&lt;font color="#ff0000"&gt;String &lt;/font&gt;&lt;font color="#000000"&gt;= IO.File.ReadAllText(cruiseProjectStateFile)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;xdoc As New Xml.XmlDocument&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;xdoc.LoadXml(stateFileContents)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;result.LastSucessFullLabel = xdoc.SelectSingleNode(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;IntegrationResult/LastSuccessfulIntegrationLabel&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;).InnerText&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;LastIntegrationStatus = xdoc.SelectSingleNode(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;IntegrationResult/Status&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;).InnerText&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;result.IsSuccesfull = LastIntegrationStatus = &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Success&amp;quot;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Catch ex As Exception&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;EventLog.WriteEntry(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;CCNet-InstallTrigger&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Error reading state file of project : &amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+ cruiseProjectStateFile + ex.ToString, EventLogEntryType.&lt;/font&gt;&lt;font color="#0000ff"&gt;Error&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End &lt;/font&gt;&lt;font color="#000000"&gt;Try&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return result&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Function &lt;/font&gt;&lt;font color="#000000"&gt;isDeploySettingsFileIsUpdated() As Boolean&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;DateTime.UtcNow.Subtract(_UpdateDeploySettingsProjectLastTimeChecked).TotalSeconds &amp;gt; &lt;/font&gt;&lt;font color="#800080"&gt;5 &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;'check the state file every X seconds&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;Dim &lt;/font&gt;&lt;font color="#000000"&gt;news = GetInfoFromCCNetStateFile(_updateDeploySettingsStateFile)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;_UpdateDeploySettingsProjectLastTimeChecked = DateTime.UtcNow&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;If &lt;/font&gt;&lt;font color="#000000"&gt;_UpdateDeploySettingsVersion &amp;lt;&amp;gt; news.LastSucessFullLabel &lt;/font&gt;&lt;font color="#0000ff"&gt;Then&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;_UpdateDeploySettingsVersion = news.LastSucessFullLabel&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;True&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;End If&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;Return &lt;/font&gt;&lt;font color="#0000ff"&gt;False&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Function&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Sub &lt;/font&gt;&lt;font color="#000000"&gt;FirstTimeInitialize()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;_cruiseInstallProjectStateFile = IO.Path.Combine(New IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly.&lt;/font&gt;&lt;font color="#ff0000"&gt;Location&lt;/font&gt;&lt;font color="#000000"&gt;).DirectoryName, CruiseInstallProject + &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;.state&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;_updateDeploySettingsStateFile = IO.Path.Combine(New IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly.&lt;/font&gt;&lt;font color="#ff0000"&gt;Location&lt;/font&gt;&lt;font color="#000000"&gt;).DirectoryName, _UpdateDeploySettingsProject + &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;.state&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;_UpdateDeploySettingsVersion = GetInfoFromCCNetStateFile(_updateDeploySettingsStateFile).LastSucessFullLabel&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;_UpdateDeploySettingsProjectLastTimeChecked = DateTime.UtcNow&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;_ServerNameIsOk = ServerNameIsOk()&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;Private Class &lt;/font&gt;&lt;font color="#000000"&gt;StateFileInfo&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Public Property &lt;/font&gt;&lt;font color="#000000"&gt;LastSucessFullLabel As &lt;/font&gt;&lt;font color="#ff0000"&gt;String&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;Public &lt;/font&gt;&lt;font color="#000000"&gt;IsSuccesfull As Boolean&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;End Class&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;End Class&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-9127222665833297859?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/9127222665833297859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/07/yet-another-trigger-installtrigger.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9127222665833297859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9127222665833297859'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/07/yet-another-trigger-installtrigger.html' title='Yet another trigger : installTrigger'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-2955948332491367602</id><published>2011-04-04T18:42:00.012+02:00</published><updated>2011-04-04T22:18:56.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customizing code'/><title type='text'>Tuning CCNet to your whishes : a new trigger</title><content type='html'>There was a request on the user list to run a nightly "publish" build, which takes the output of the other "child" projects and copies them to a new output directory. Since the output is quite large (&gt; 1 GB), this should only be done each night if something changed in any of the other projects, but only if all of them have run successfully.&lt;br /&gt;You can read the full details also on &lt;a href="http://stackoverflow.com/questions/5458908/nightly-publish-build-in-cruisecontrol-net"&gt;Stack overflow&lt;/a&gt;. Now one should be able to do this using the existing functionality, but that is not the case :-(. The reason is mainly that CCNet has grown from a simple CI server to a more feature rich one over the years, but here and there are still leftovers from the beginning, read the simple CI server. Triggers are just events that occur, and do not know a state, there is the project trigger, but that is more of a fire and forget one. So restarting a server poses a problem, combining multiple project triggers into one trigger poses a problem with timings over a day and so on.&lt;br /&gt;&lt;br /&gt;To handle this situation, the only option is to write some code that does it. Thankfully CCNet has a plugin architecture that works quite well, see my previous &lt;a href="http://rubenwillems.blogspot.com/2009/01/customizing-code-of-ccnet-part-3.html"&gt;creating a plugin&lt;/a&gt; about it for more details.&lt;br /&gt;&lt;br /&gt;As an example of this request, I will create a new trigger, because this will be the fastest way to get a result with just a few lines of code adjustments needed. For starters I just copied the code of the existing schedule trigger into a new class, named ScheduleTriggerExtended.&lt;br /&gt;&lt;br /&gt;Changes done : &lt;br /&gt;° &lt;b&gt;added property SubProjectsToWatch&lt;/b&gt;&lt;br /&gt;&lt;i&gt;The project names of the child projects to watch. For simplicity only the project name, meaning that it has to be on the same build server and  has browse rights (or no security setup)&lt;/i&gt;&lt;br /&gt;° &lt;b&gt;added property ServerUri&lt;/b&gt; &lt;br /&gt;&lt;i&gt;the uri of the ccnet server, example : tcp://localhost:21234/CruiseServerClient.rem&lt;/i&gt;&lt;br /&gt;° &lt;b&gt;added property SubProjectsSavePath&lt;/b&gt;&lt;br /&gt;&lt;i&gt;A path reachable by the CCNet server (preferably local). This is used to store the timestamps of the subprojects. So we can check if the timestamp changed between the integration of a subproject and the build of the involved subproject. &lt;/i&gt;&lt;br /&gt;° &lt;b&gt;updated public IntegrationRequest Fire&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Whenever the scheduled time is reached, also check if the subProjects are changed, by comparing the current last build times with the saved ones.&lt;/i&gt;&lt;br /&gt;° &lt;b&gt;updated public void IntegrationCompleted  &lt;/b&gt; &lt;br /&gt;&lt;i&gt;Save the new buildtimes of the subprojects to the SubProjectsSavePath for later reference. &lt;/i&gt;&lt;br /&gt;&lt;br /&gt;When reading this all over, the best approach would be to create a 'CCNet source control', that can scan other CCNet projects for changes, and filter them according to some filters (state, build time, ...)&lt;br /&gt;&lt;br /&gt;Anyway, below is the trigger class, all changes are highlighted with comment : &lt;i&gt;&lt;b&gt;added code&lt;/b&gt;&lt;/i&gt;. Copy entire source into an assembly with name something like : CCNet.&lt;i&gt;whatever&lt;/i&gt;.plugin  &lt;br /&gt;Example : CCNet.RuWi.plugin&lt;br /&gt;And set references to NetReflector.dll, ThoughtWorks.CruiseControl.Core.dll, ThoughtWorks.CruiseControl.Remote.dll&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A config is also provided below the code.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr bgcolor="#ffffff"&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;Globalization&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#000000"&gt;Exortech.NetReflector;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Config;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;using &lt;/font&gt;&lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Remote;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;namespace &lt;/font&gt;&lt;font color="#000000"&gt;ThoughtWorks.CruiseControl.Core.Triggers&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;[ReflectorType(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;scheduleTriggerExtended&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;    &lt;font color="#0000ff"&gt;public class &lt;/font&gt;&lt;font color="#000000"&gt;ScheduleTriggerExtended : ITrigger, IConfigurationValidation&lt;/font&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private string &lt;/font&gt;&lt;font color="#000000"&gt;name;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;DateTimeProvider dtProvider;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;TimeSpan integrationTime;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;DateTime nextBuild;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private bool &lt;/font&gt;&lt;font color="#000000"&gt;triggered;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;Int32 randomOffSetInMinutesFromTime&lt;/font&gt;&lt;font color="#008000"&gt;/* = 0*/&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#808000"&gt;Random &lt;/font&gt;&lt;font color="#000000"&gt;randomizer = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#808000"&gt;Random&lt;/font&gt;&lt;font color="#000000"&gt;();&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Initializes a new instance of the &amp;lt;see cref=&amp;quot;ScheduleTrigger&amp;quot;/&amp;gt; class.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;ScheduleTriggerExtended()&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;: &lt;/font&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#000000"&gt;DateTimeProvider())&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Initializes a new instance of the &amp;lt;see cref=&amp;quot;ScheduleTrigger&amp;quot;/&amp;gt; class.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;param name=&amp;quot;dtProvider&amp;quot;&amp;gt;The dt provider.&amp;lt;/param&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;ScheduleTriggerExtended(DateTimeProvider dtProvider)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;font color="#000000"&gt;.dtProvider = dtProvider;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;font color="#000000"&gt;.BuildCondition = BuildCondition.IfModificationExists;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;WeekDays = (DayOfWeek[])DayOfWeek.GetValues(&lt;/font&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;font color="#000000"&gt;(DayOfWeek));&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// The time of day that the build should run at. The time should be specified in a locale-specific format (ie. H:mm am/pm is acceptable for US locales.)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;default&amp;gt;n/a&amp;lt;/default&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;time&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public virtual string &lt;/font&gt;&lt;font color="#000000"&gt;Time&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;get { &lt;/font&gt;&lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;integrationTime.ToString(); }&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;set&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;integrationTime = TimeSpan.Parse(value);&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;catch &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#808000"&gt;Exception &lt;/font&gt;&lt;font color="#000000"&gt;ex)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;msg = &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Unable to parse daily schedule integration time: {0}.  The integration time should be specified in the format: {1}.&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;throw new &lt;/font&gt;&lt;font color="#808000"&gt;ConfigurationException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;.Format(&lt;/font&gt;&lt;font color="#808000"&gt;CultureInfo&lt;/font&gt;&lt;font color="#000000"&gt;.CurrentCulture, msg, value, &lt;/font&gt;&lt;font color="#808000"&gt;CultureInfo&lt;/font&gt;&lt;font color="#000000"&gt;.CurrentCulture.DateTimeFormat.ShortTimePattern), ex);&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Adds a random amount of minutes between 0 and set value to the time. This is mainly meant for spreading the load of actions to a central server. &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Value must be between 0 and 59.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;default&amp;gt;0&amp;lt;/default&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;randomOffSetInMinutesFromTime&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public int &lt;/font&gt;&lt;font color="#000000"&gt;RandomOffSetInMinutesFromTime&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;get { &lt;/font&gt;&lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;randomOffSetInMinutesFromTime; }&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;set&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;randomOffSetInMinutesFromTime = value;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(randomOffSetInMinutesFromTime &amp;lt; &lt;/font&gt;&lt;font color="#800080"&gt;0 &lt;/font&gt;&lt;font color="#000000"&gt;|| randomOffSetInMinutesFromTime &amp;gt;= &lt;/font&gt;&lt;font color="#800080"&gt;60&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;throw new &lt;/font&gt;&lt;font color="#808000"&gt;ConfigurationException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;randomOffSetInMinutesFromTime must be in the range 0 - 59&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// The name of the trigger. This name is passed to external tools as a means to identify the trigger that requested the build.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;default&amp;gt;ScheduleTrigger&amp;lt;/default&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;name&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public string &lt;/font&gt;&lt;font color="#000000"&gt;Name&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(name == &lt;/font&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;font color="#000000"&gt;) name = GetType().Name;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;name;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;set { name = value; }&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// The condition that should be used to launch the integration. By default, this value is &amp;lt;b&amp;gt;IfModificationExists&amp;lt;/b&amp;gt;, meaning that an integration will&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// only be triggered if modifications have been detected. Set this attribute to &amp;lt;b&amp;gt;ForceBuild&amp;lt;/b&amp;gt; in order to ensure that a build should be launched &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// regardless of whether new modifications are detected. &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;default&amp;gt;IfModificationExists&amp;lt;/default&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;buildCondition&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;BuildCondition BuildCondition { get; set; }&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// The week days on which the build should be run (eg. Monday, Tuesday). By default, all days of the week are set.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;default&amp;gt;Monday-Sunday&amp;lt;/default&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;weekDays&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;DayOfWeek[] WeekDays { get; set; }&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;//added code&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// The project names of the child projects to watch. For cimplicity only the project name, &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// meaning that it has to be on the same build server and  has browse rights (or no security setup)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorArray(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;subProjectsToWatch&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public string&lt;/font&gt;&lt;font color="#000000"&gt;[] SubProjectsToWatch { get; set; }&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// the uri of the ccnet server, example : tcp://localhost:21234/CruiseServerClient.rem&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;serverUri&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public string &lt;/font&gt;&lt;font color="#000000"&gt;ServerUri { get; set; }&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// A path reachable by the CCNet server (preferably local). This is used to store the timestamps of the subprojects.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// So we can check if the timestamp changed between the integration of a subproject and the build of the involved subproject.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;[ReflectorProperty(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;subProjectsSavePath&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, Required = &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;)]&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public string &lt;/font&gt;&lt;font color="#000000"&gt;SubProjectsSavePath { get; set; }&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Looks at the timestamp saved in the reference file of the subprojects. If that timestamp differs from the last&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// integration timestamp of the subproject, a re-build is needed.&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private bool &lt;/font&gt;&lt;font color="#000000"&gt;SubProjectsAreChanged()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;// nothing to watch&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(SubProjectsToWatch == &lt;/font&gt;&lt;font color="#0000ff"&gt;null &lt;/font&gt;&lt;font color="#000000"&gt;|| SubProjectsToWatch.Length == &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;) &lt;/font&gt;&lt;font color="#0000ff"&gt;return false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;//the save path does not exist, so we must do the first build&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(!&lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;Directory&lt;/font&gt;&lt;font color="#000000"&gt;.Exists(SubProjectsSavePath)) &lt;/font&gt;&lt;font color="#0000ff"&gt;return true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;//get the last build info from the build server&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;var cm = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#000000"&gt;RemoteCruiseManagerFactory().GetCruiseManager(ServerUri);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;var buildInfos = cm.GetCruiseServerSnapshot().ProjectStatuses;&lt;/font&gt;&lt;br /&gt;            &lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;foreach &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;subprojectName &lt;/font&gt;&lt;font color="#0000ff"&gt;in &lt;/font&gt;&lt;font color="#000000"&gt;SubProjectsToWatch)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;locationOnDisk = &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(SubProjectsSavePath, subprojectName);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(! &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;File&lt;/font&gt;&lt;font color="#000000"&gt;.Exists(locationOnDisk)) &lt;/font&gt;&lt;font color="#0000ff"&gt;return true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;font color="#000000"&gt;DateTime LastTimeBuildInIntegration;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;data = &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;File&lt;/font&gt;&lt;font color="#000000"&gt;.ReadAllText(locationOnDisk);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(DateTime.TryParse(data, &lt;/font&gt;&lt;font color="#0000ff"&gt;out &lt;/font&gt;&lt;font color="#000000"&gt;LastTimeBuildInIntegration))&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;var lastbuildinfo = GetSubProjectLastBuildInfo(subprojectName, buildInfos);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(lastbuildinfo.BuildStatus != IntegrationStatus.Success) &lt;/font&gt;&lt;font color="#0000ff"&gt;return false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(LastTimeBuildInIntegration &amp;lt; lastbuildinfo.LastBuildDate ) &lt;/font&gt;&lt;font color="#0000ff"&gt;return true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#008000"&gt;// file is empty, the contents is not a date, is corrupted, ....&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;throw new &lt;/font&gt;&lt;font color="#808000"&gt;Exception&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;.Format(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Contents of {0}  --{1}-- is not convertable to a datetime&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, locationOnDisk,data));&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;return false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;Remote.ProjectStatus GetSubProjectLastBuildInfo(&lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;projectName, Remote.ProjectStatus[] serverInfo)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;foreach &lt;/font&gt;&lt;font color="#000000"&gt;(ProjectStatus ps &lt;/font&gt;&lt;font color="#0000ff"&gt;in &lt;/font&gt;&lt;font color="#000000"&gt;serverInfo)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(ps.Name == projectName) &lt;/font&gt;&lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;ps;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;throw new &lt;/font&gt;&lt;font color="#808000"&gt;Exception&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;.Format(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Project {0} not found on server with uri {1}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, projectName, ServerUri));&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private void &lt;/font&gt;&lt;font color="#000000"&gt;SaveSubProjectsLastBuildTimes()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;// nothing to watch&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(SubProjectsToWatch == &lt;/font&gt;&lt;font color="#0000ff"&gt;null &lt;/font&gt;&lt;font color="#000000"&gt;|| SubProjectsToWatch.Length == &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;) &lt;/font&gt;&lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;            &lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(!&lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;Directory&lt;/font&gt;&lt;font color="#000000"&gt;.Exists(SubProjectsSavePath)) &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;Directory&lt;/font&gt;&lt;font color="#000000"&gt;.CreateDirectory(SubProjectsSavePath);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;DateTime now = dtProvider.Now;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;foreach &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;subprojectName &lt;/font&gt;&lt;font color="#0000ff"&gt;in &lt;/font&gt;&lt;font color="#000000"&gt;SubProjectsToWatch)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;locationOnDisk = &lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(SubProjectsSavePath, subprojectName);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;IO&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;File&lt;/font&gt;&lt;font color="#000000"&gt;.WriteAllText(locationOnDisk, now.ToLongDateString());&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;//end added code&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private void &lt;/font&gt;&lt;font color="#000000"&gt;SetNextIntegrationDateTime()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(integrationTime.Minutes + RandomOffSetInMinutesFromTime &amp;gt;= &lt;/font&gt;&lt;font color="#800080"&gt;60&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;throw new &lt;/font&gt;&lt;font color="#808000"&gt;ConfigurationException&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;.Format(&lt;/font&gt;&lt;font color="#008080"&gt;System&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#008080"&gt;Globalization&lt;/font&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;font color="#808000"&gt;CultureInfo&lt;/font&gt;&lt;font color="#000000"&gt;.CurrentCulture, &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Scheduled time {0}:{1} + randomOffSetInMinutesFromTime {2} would exceed the hour, this is not allowed&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, integrationTime.Hours, integrationTime.Minutes, RandomOffSetInMinutesFromTime));&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;DateTime now = dtProvider.Now;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;nextBuild = &lt;/font&gt;&lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#000000"&gt;DateTime(now.Year, now.Month, now.Day, integrationTime.Hours, integrationTime.Minutes, &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;, &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(randomOffSetInMinutesFromTime &amp;gt; &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;Int32 randomNumber = randomizer.Next(randomOffSetInMinutesFromTime);&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;nextBuild = nextBuild.AddMinutes(randomNumber);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(now &amp;gt;= nextBuild)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;nextBuild = nextBuild.AddDays(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;nextBuild = CalculateNextIntegrationTime(nextBuild);&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private &lt;/font&gt;&lt;font color="#000000"&gt;DateTime CalculateNextIntegrationTime(DateTime nextIntegration)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;while &lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(IsValidWeekDay(nextIntegration.DayOfWeek))&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;nextIntegration = nextIntegration.AddDays(&lt;/font&gt;&lt;font color="#800080"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;nextIntegration;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;private bool &lt;/font&gt;&lt;font color="#000000"&gt;IsValidWeekDay(DayOfWeek nextIntegrationDay)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#808000"&gt;Array&lt;/font&gt;&lt;font color="#000000"&gt;.IndexOf(WeekDays, nextIntegrationDay) &amp;gt;= &lt;/font&gt;&lt;font color="#800080"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Integrations the completed. &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public virtual void &lt;/font&gt;&lt;font color="#000000"&gt;IntegrationCompleted()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(triggered)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#008000"&gt;// added code&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;SaveSubProjectsLastBuildTimes();&lt;/font&gt;&lt;br /&gt;                &lt;font color="#008000"&gt;// added code&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;SetNextIntegrationDateTime();&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;triggered = &lt;/font&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Gets the next build. &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;value&amp;gt;&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;DateTime NextBuild&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;get&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(nextBuild == DateTime.MinValue)&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                    &lt;font color="#000000"&gt;SetNextIntegrationDateTime();&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;return &lt;/font&gt;&lt;font color="#000000"&gt;nextBuild;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// Fires this instance. &lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#008000"&gt;/// &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;public &lt;/font&gt;&lt;font color="#000000"&gt;IntegrationRequest Fire()&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;DateTime now = dtProvider.Now;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;//added code&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;//if (now &amp;gt; NextBuild &amp;amp;&amp;amp; IsValidWeekDay(now.DayOfWeek))&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(now &amp;gt; NextBuild &amp;amp;&amp;amp; IsValidWeekDay(now.DayOfWeek) &amp;amp;&amp;amp; SubProjectsAreChanged())&lt;/font&gt;&lt;br /&gt;            &lt;font color="#008000"&gt;// end added code&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;triggered = &lt;/font&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;                &lt;font color="#0000ff"&gt;return new &lt;/font&gt;&lt;font color="#000000"&gt;IntegrationRequest(BuildCondition, Name, &lt;/font&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;return null&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;font color="#0000ff"&gt;void &lt;/font&gt;&lt;font color="#000000"&gt;IConfigurationValidation.Validate(IConfiguration configuration, ConfigurationTrace parent, IConfigurationErrorProcesser errorProcesser)&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;projectName = &lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;(Unknown)&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;var project = parent.GetAncestorValue&amp;lt;Project&amp;gt;();&lt;/font&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(project != &lt;/font&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;projectName = project.Name;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;            &lt;font color="#0000ff"&gt;if &lt;/font&gt;&lt;font color="#000000"&gt;(integrationTime.Minutes + RandomOffSetInMinutesFromTime &amp;gt;= &lt;/font&gt;&lt;font color="#800080"&gt;60&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;{&lt;/font&gt;&lt;br /&gt;                &lt;font color="#000000"&gt;errorProcesser.ProcessError(&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Scheduled time {0}:{1} + randomOffSetInMinutesFromTime {2} would exceed the hour, this is not allowed. Conflicting project {3}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, integrationTime.Hours, integrationTime.Minutes, RandomOffSetInMinutesFromTime, projectName);&lt;/font&gt;&lt;br /&gt;            &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;        &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Example Config&lt;br /&gt;  &lt;br /&gt;&lt;table&gt;&lt;tr bgcolor="#ffffff"&gt;&lt;td&gt;&lt;pre&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;cruisecontrol &lt;/font&gt;&lt;font color="#800080"&gt;xmlns:cb&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;urn:ccnet.config.builder&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Child1&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child1&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child1&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;triggers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nullTask&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xmllogger &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Child2&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child2&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child2&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;triggers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nullTask&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xmllogger &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Child3&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child3&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Child3&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;triggers &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nullTask&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xmllogger &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;project &lt;/font&gt;&lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Integrator&amp;quot; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Intgrator&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;artifactDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;D:\temp\Integration\Integrator&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;workingDirectory&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;triggers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;scheduleTriggerExtended &lt;/font&gt;&lt;br /&gt;            &lt;font color="#800080"&gt;time&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;14:08&amp;quot; &lt;/font&gt;&lt;br /&gt;            &lt;font color="#800080"&gt;buildCondition&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;IfModificationExists&amp;quot; &lt;/font&gt;&lt;br /&gt;            &lt;font color="#ff0000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;Scheduled&amp;quot;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#800080"&gt;serverUri&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;tcp://localhost:21234/CruiseServerClient.rem&amp;quot;&lt;/font&gt;&lt;br /&gt;            &lt;font color="#800080"&gt;subProjectsSavePath&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#ff00ff"&gt;&amp;quot;d:\temp&amp;quot;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;subProjectsToWatch&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Child1&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Child3&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;name&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;subProjectsToWatch&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;weekDays&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;weekDay&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;Saturday&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;weekDay&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;weekDays&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;scheduleTriggerExtended&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;triggers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;tasks &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;nullTask&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;tasks&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#808000"&gt;xmllogger &lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;publishers&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;    &lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#000000"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#808000"&gt;cruisecontrol&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-2955948332491367602?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/2955948332491367602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/04/tuning-ccnet-to-your-whishes-new.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2955948332491367602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2955948332491367602'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/04/tuning-ccnet-to-your-whishes-new.html' title='Tuning CCNet to your whishes : a new trigger'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8580630753895667027</id><published>2011-02-21T21:26:00.005+01:00</published><updated>2011-02-23T20:19:15.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CCNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><category scheme='http://www.blogger.com/atom/ns#' term='Cradiator'/><title type='text'>Cradiator : WPF frontend for CCNet</title><content type='html'>I've been working on improving my WPF skills, and what's better than making a WPF front-end for CCNet? Good thing is that this already exists : &lt;a href="http://cradiator.codeplex.com/"&gt;Cradiator&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've made a fork on github, so that PandaWood (the maintainer of Cradiator) can pull in my changes as he wants. Since this is my first encounter with Git, I must admit that it takes some getting used to, but it works like a charm.&lt;br /&gt;&lt;br /&gt;You can find my fork &lt;a href="https://github.com/RubenWillems/Cradiator/commit/a1ee43878a1d6ad39c844490005622b8f6eebac5"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've made the following updates : &lt;br /&gt;° added a server-regex, to filter on (build)server name&lt;br /&gt;° added a name on the view&lt;br /&gt;° shows the amount of projects fetched from the URL&lt;br /&gt;° option 'Show only broken'&lt;br /&gt;° option 'Show server name'&lt;br /&gt;° option 'Show out of date' projects&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A bit of explanation on the new options :&lt;br /&gt;&lt;h4&gt;Show Only Broken&lt;/h4&gt;This shows only the broken projects according to selection (project name, category name, server name). If no broken projects are found a smiley and the view name are shown, so you know which view is ok.&lt;br /&gt;&lt;h4&gt;Show Server Name&lt;/h4&gt;This just shows the server name below the projectname. Comes in handy when you have projects with the same name on different build servers. (Compile on Windows and on Linux for example)&lt;br /&gt;&lt;h4&gt;Show Out Of Date&lt;/h4&gt;This shows the projects that are outside of an allowed time difference in minutes. The highest LatestBuildTime of all projects is taken. This comes in handy when you have projects(mostly on different build servers) that should do an action at a certain time. This option allows to show the projects which did not build, regardless if they are broken or not. For example the windows build machine was down from 20:00 to 23:00 hours, but we had a FullBuild defined at 22:00.&lt;br /&gt;Now Cradiator shows that the FullBuild on the windows server did not take place.&lt;br /&gt;&lt;br /&gt;I use this for some time at work, and it is great. This makes it a lot easier to keep an eye on all the installations I do with CCNet. Remember 80+ servers with each about 30 projects, this makes 2400 projects to watch, so some filtering is needed.&lt;br /&gt;&lt;br /&gt;If you get the code and build it, you can see all the new options in action, I update the debugProjects file to show them without needing to point your buildserver.&lt;br /&gt;&lt;br /&gt;Suggestions or remarks are welcome&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8580630753895667027?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8580630753895667027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/02/cradiator-wpf-frontend-for-ccnet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8580630753895667027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8580630753895667027'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/02/cradiator-wpf-frontend-for-ccnet.html' title='Cradiator : WPF frontend for CCNet'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8444066967879009807</id><published>2011-01-09T11:05:00.007+01:00</published><updated>2011-01-10T14:13:27.696+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><category scheme='http://www.blogger.com/atom/ns#' term='ccnet vnext'/><title type='text'>WPF : a new strategy</title><content type='html'>So I gave up WPF a year ago, and went back to the basic business programming :-) Even at work I do not do any WPF anymore.&lt;br /&gt;This was very successful, but now I got a problem : business programming is all done and fast, but the WPF side still needs work. Having a bad feeling, I started learning WPF, again.. . &lt;br /&gt;&lt;br /&gt;But for some reason I stumbled on a great resource, I did not find a year ago : &lt;a href="http://www.lab49.com/files/videos/Jason%20Dolinger%20MVVM.wmv"&gt;WPF MVVM Video by Jason Dolinger&lt;/a&gt;. Now I find this a must see video for anyone starting WPF or MVVM! It is 1 hour, but it tackles almost everything for WPF - MVVM programming. No fancy UI stuff, but data handling! It is a simple application, but Jason takes it through an entire re-factoring cycle : &lt;br /&gt;° starting the win-form way (like most people tend to do when first doing WPF)&lt;br /&gt;° introducing a basic view-model&lt;br /&gt;° a view-model with commands&lt;br /&gt;° adding tests to the view-model&lt;br /&gt;° introducing unity&lt;br /&gt;° ...&lt;br /&gt;&lt;br /&gt;This resource really helped me a lot more than the other stuff I found in the past. And now I can search for more specific items if it needs be, since I now know how WPF data handling works. Jason just uses the basic WPF stuff, not 3rd party libs like prism or so, giving you an idea of to start from scratch and what benefits certain frameworks can provide.&lt;br /&gt;&lt;br /&gt;Since we're a VB.Net shop, I converted the example to VB.Net what also took a lot of time and effort. There are items in C# that do not have a VB.Net counterpart, or are named differently, for example the yield operator. I only converted the WPF application to VB.Net, and not the dataprovider project, as this is not touched in the video at all. Every big part in the video has its own subfolder and solution, so you can easily see what is changed in what part. I hope you find this conversion useful.&lt;br /&gt;&lt;br /&gt;Another reason I looked again at WPF is CCNet vNext, I'm playing with the idea to make the new cctray in wpf, this will give it a new, modern look. And with a bit of luck, we can make the dashbord in silverlight, so we should be able to use the same view-models for cctray and the dashboard!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://users.telenet.be/williams/Blog/MVVM.zip"&gt;The source of Jasons video and the VB.net conversion&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8444066967879009807?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8444066967879009807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2011/01/wpf-new-strategy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8444066967879009807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8444066967879009807'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2011/01/wpf-new-strategy.html' title='WPF : a new strategy'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-5745698343185939492</id><published>2010-12-26T17:27:00.002+01:00</published><updated>2010-12-26T18:37:56.613+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='CCNet'/><title type='text'>Continous Installation : going beyond the I of installation</title><content type='html'>The installation of software towards our customers goes very smooth :-) I've set this system up &lt;a href="http://rubenwillems.blogspot.com/2009/02/ci-continous-installation.html"&gt;about 2 years ago&lt;/a&gt;, and it is a very appreciated part in our company. Hundreds of installations done. &lt;br /&gt;From the start on I extended the functionality beyond the basic installation part, from day 1 actually, but I never wrote about it yet. I also collected some data of those servers : firstly just the application event log. The idea was to send us the error logs, so we were informed if a customer called. And we can do statistics on these errors. What application throws the most errors, are these technical, validation, communication, ... related and so on. Very usefull information.&lt;br /&gt;Later on, I extended it even more to watch the server itself, CPU usage, hard disk usage and even SQL Server information : backup ok, size of database, size of tables, ...&lt;br /&gt;All this info is send to our central SQL server for analysis in the same way as the rest : &lt;a href="http://rubenwillems.blogspot.com/2009/08/continous-installation-how-it-works.html"&gt;via the FTP site&lt;/a&gt;. This also proved very usefull since we discovered hard disk failures and bad memory modules before they could do serious damage !&lt;br /&gt;&lt;br /&gt;But now a new challenge appeared : Hyper-V&lt;br /&gt;&lt;br /&gt;Our next servers are more powerfull and we want to reduce the amount of time we need when we have to replace one. The answer is Hyper-V.&lt;br /&gt;These servers are loaded with Hyper-V Core, and above that we will host 1 or more virtual servers. If the hardware needs updating, we can just put in a bigger server with Hyper-V Core on it, move the virtual servers on to it, and we're done. All settings are kept as the were before the move : Big Advantage !!&lt;br /&gt;&lt;br /&gt;The catch : we also need to watch the Hyper-V machine itself as we do the current servers. System team looked around for Hyper-V remote stuff, but could not find anything (payable). When I heard of this, I said : &lt;br /&gt;Just use CCNet :-D We use it on all of our other servers and it works, so why not on a Hyper-V one?&lt;br /&gt;&lt;br /&gt;And it worked indeed, Hyper-V Core comes with .Net framework 2.O loaded, and that's all I need. To be on the safe side I use the same (very old) version of CCNet as we do on the other servers : 1.4.2 (yikes indeed very old).&lt;br /&gt;But we only use the exec task and the basic triggers, so it is all we need.&lt;br /&gt;just copy the CCNet setup exe on it via a share, run it through a command prompt, and CCNet is installed. Could not be easier !&lt;br /&gt;Now we can monitor and maintain the Hyper-V servers the same as the other ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-5745698343185939492?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/5745698343185939492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2010/12/continous-installation-going-beyond-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/5745698343185939492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/5745698343185939492'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2010/12/continous-installation-going-beyond-i.html' title='Continous Installation : going beyond the I of installation'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-6991199923545280564</id><published>2010-08-05T20:23:00.006+02:00</published><updated>2010-12-26T18:41:32.656+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='customizing code'/><title type='text'>Continous Installation : Forcing multiple builds at once</title><content type='html'>It's been about 2 years since I've set up CCNet for Continuous Installation at work, and it works like a charm. Programs we install with CCNet are at time of writing :&lt;ul&gt;&lt;li&gt;Click Once &lt;a href="http://rubenwillems.blogspot.com/2009/02/continuous-installation-and-clickonce.html"&gt;(click for more info)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Windows services&lt;/li&gt;&lt;li&gt;Wcf Services&lt;/li&gt;&lt;li&gt;Ms SQL Reporting Services &lt;a href="http://rubenwillems.blogspot.com/2010/04/continuous-installation-and-ms-sql.html"&gt;(click for more info)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Off course some programs also require a database, so the database updating is also done as a part of the installation :-).&lt;br /&gt;&lt;br /&gt;But now another need has surfaced : &lt;b&gt;Program Dependencies&lt;/b&gt;.&lt;br /&gt;We make software for the local government (City hall level), but this is all kinds of software : finance, registry of births, deaths and marriages, construction requests and so on. What we do NOT want is that multiple programs need to handle the state of a person (married, divorced, ...). There is 1 program that handles this kind of stuff, and others can interface with it. For the moment these interfaces are done via WCF services. So there is no '&lt;i&gt;real&lt;/i&gt;' reference like with a function library, but more like with an interface library. And so far this works great.&lt;br /&gt;&lt;br /&gt;For example when a new version of lets say Bookkeeping is needed, I may also need to install or update PeopleManagement, because of the new dependency between Bookkeeping and PeopleManagement. Now as long as it is only 1 dependency, I could just schedule them after each other, but there are programs with 5 or more dependencies :-(&lt;br /&gt;And doing it by hand also means that I (or a collegue) may forget to update a dependency, which is not good.&lt;br /&gt;&lt;br /&gt;There is the &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/ForceBuildPublisher"&gt;ForceBuild Publisher&lt;/a&gt;, but this  has a big problem, it just launches the projects with the &lt;i&gt;Fire and Forget&lt;/i&gt; strategy. Meaning that I do not have control of the exact order of execution, I have no control what to do when a dependency fails, ...   &lt;br /&gt;&lt;br /&gt;Luckily the code of that publisher is a good starting point, the only things I need to add is to wait for the outcome, before returning control to CCNet-core and foresee a property to fail the task if the forced build failed. &lt;br /&gt;&lt;br /&gt;The current code of the ForceBuild is as follows : &lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Run&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(IIntegrationResult result)&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(IntegrationStatus != result.Status) &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;factory.GetCruiseManager(ServerUri).ForceBuild(Project, BuildForcerName);&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;With the adjustments, the code is :&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Run&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(IIntegrationResult result)&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#008000"&gt;//get cruisemanager&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;var cm = factory.GetCruiseManager(ServerUri);&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;var cpi = GetCurrentProjectInfo(cm);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#008000"&gt;//get last known build date of project to be forced&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;var lastBuildDate = cpi.LastBuildDate;&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;var compareBuildDate = lastBuildDate;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#008000"&gt;//force build of wanted project&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;cm.ForceBuild(ProjectName, buildForcerName);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#008000"&gt;//keep waiting until build is done&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;while &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(lastBuildDate.Equals(compareBuildDate))&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Threading&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Thread&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Sleep(&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;500&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#000000"&gt;cpi = GetCurrentProjectInfo(cm);&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#000000"&gt;compareBuildDate = cpi.LastBuildDate;&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(FailIfForceBuildFaled &amp;amp;&amp;amp; cpi.BuildStatus != IntegrationStatus.Success)&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#0000ff"&gt;throw new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;CruiseControlException(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Force Build Failed of : &amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;+ ProjectName);&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ProjectStatus GetCurrentProjectInfo(ICruiseManager cm)&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;var previousBuildInfos = cm.GetCruiseServerSnapshot();&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;ProjectStatus result = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(ProjectStatus ps &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;previousBuildInfos.ProjectStatuses)&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(ps.Name == ProjectName)&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#000000"&gt;result = ps;&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#0000ff"&gt;continue&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;  &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;result;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;Not much change in code, but a very great increase in the ease of installing our software. Now I just schedule this  project, iso many others :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-6991199923545280564?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/6991199923545280564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2010/08/continous-installation-forcing-multiple.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/6991199923545280564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/6991199923545280564'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2010/08/continous-installation-forcing-multiple.html' title='Continous Installation : Forcing multiple builds at once'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8023121043248885105</id><published>2010-07-19T12:21:00.003+02:00</published><updated>2010-07-19T12:46:37.592+02:00</updated><title type='text'>back in action</title><content type='html'>It's been a very long time since I made a post, due to various reasons. My work got all my time due to a project that went bad :-( This is now solved, so meaning more time for CCNet now : Yeah !&lt;br /&gt;I do need to catch up, so give me some time. There is a second release planned of the 1.5 version which should fix some annoying bugs. ETA should be in 1 to 2 weeks. As for the 1.6 release, this will probably be around October or so, depending on the amount of new items. &lt;br /&gt;&lt;br /&gt;I did make a small new addition to the 1.6 code base: a Cron Trigger.&lt;br /&gt;For the people working with a Unix system, this sounds familiar, for those not knowing, it is a time-based job scheduler. Cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates. It is commonly used to automate system maintenance or administration. &lt;br /&gt;&lt;br /&gt;Because the Cron syntax is very simple it is also very powerfull. Scheduling something every tuesday every 10 minutes between 15 and 16 hours, but only in the weekends is very easy. &lt;br /&gt;You can see the documentation at &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Cron+Trigger"&gt;Cron Trigger&lt;/a&gt;&lt;br /&gt;All the hard work was already done, there is a project &lt;a href="http://code.google.com/p/ncrontab/"&gt;NCrontab&lt;/a&gt; so it was just adding the code, very easy.&lt;br /&gt;&lt;br /&gt;Next items will be crawling through Jira, and fixing open issues, so that will keep me busy for some time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8023121043248885105?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8023121043248885105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2010/07/back-in-action.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8023121043248885105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8023121043248885105'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2010/07/back-in-action.html' title='back in action'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8028873663179958027</id><published>2010-04-13T21:06:00.004+02:00</published><updated>2010-04-13T22:32:59.215+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><title type='text'>Continuous Installation and MS SQL Reporting Services</title><content type='html'>A few weeks ago, I was informed that we also will use &lt;b&gt;MS SQL Reporting Services&lt;/b&gt; in our programs for the reporting. Now I was used to Crystal Reports, which are easy to deploy because they are compiled into the assembly. But fust for making things more complicated, the company decided to use MS SQL Reporting Services.&lt;br /&gt;From deployment point of view, this is a pain !&lt;br /&gt;The reason : there is no real deployment strategy for seen by MS (as far as I could find out). There are 3 options :&lt;br /&gt;° distribute via the publish in Visual Studio&lt;br /&gt;° use the SOAP interface exposed by MS SQL Reporting Services&lt;br /&gt;° there is an rs.exe, but the usage is just medieval.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Option 1&lt;/b&gt;&lt;br /&gt;NO GO,  not for 75+ servers !&lt;br /&gt;this requires direct access to all of the servers, can not be sheduled, would be difficult with the current version setup we have, ....&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Option 2&lt;/b&gt;&lt;br /&gt;This would mean writing a program for communicating with the soap interface, plus its errorhandling, and more important : the data (reports and the like) must still be supplied somehow&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Option 3&lt;/b&gt;&lt;br /&gt;This seemed the best way to start, and it turned out to be so. The rs.exe is indeed medieval, but there is a nice UI : &lt;a href="http://www.sqldbatips.com/showarticle.asp?ID=62"&gt;RSScripter&lt;/a&gt;.&lt;br /&gt;RSSCripter makes a batch file that calls rs.exe with all the needed arguments (neat), and exports all wanted items into a folder structure. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I went for option 3, the approach is as follows :&lt;br /&gt;1) our reporting guy creates the various reports (yes we have a real reporting guru)&lt;br /&gt;2) when he thinks if all are some reports are ok, he uses the RSScripter to export all needed items (reports, datasources, folders, ...)&lt;br /&gt;3) he places this in a dedicated folder in source control, each 'version' is a subfolder of this dedicated folder.&lt;br /&gt;4) he presses 'force build' on the 'make package' project, which just zips the folder&lt;br /&gt;&lt;br /&gt;and now I have a package I can deploy :-)&lt;br /&gt;&lt;br /&gt;For the deployment itself, there are still some small steps needed though :&lt;br /&gt;° adjust the batch file &lt;br /&gt;   a) update the log file location&lt;br /&gt;   b) update the scriptlocation &lt;br /&gt;   c) update the target reportserver&lt;br /&gt;° adjust some rss files (report and datasource files)&lt;br /&gt;  a) update any connection strings&lt;br /&gt;  b) update user and password&lt;br /&gt;  c) update the source location&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;when all this is done, I just call the updated batch file.&lt;br /&gt;&lt;br /&gt;Nice and easy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8028873663179958027?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8028873663179958027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2010/04/continuous-installation-and-ms-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8028873663179958027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8028873663179958027'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2010/04/continuous-installation-and-ms-sql.html' title='Continuous Installation and MS SQL Reporting Services'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-7848440690574641535</id><published>2010-01-31T17:22:00.011+01:00</published><updated>2010-12-26T18:45:01.253+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>WPF : Using the designer with design time data</title><content type='html'>Back on the WPF track. Since it is really needed at my company, I re-started (again). But I finally have some good news :-). Before, I wrote all the WPF programs with 'NotePad'. Not really NotePad, I did use VS2008, but without the designer. &lt;br /&gt;The designer does not work with the programs at work! and I thought : yup another glitch in WPF.... &lt;br /&gt;&lt;br /&gt;So I started wondering why this would be, and started from scratch.&lt;br /&gt;° add a screen : designer works&lt;br /&gt;° add a listbox : designer still works&lt;br /&gt;° bind the listbox itemsource to values (via a dataprovider) : designer works&lt;br /&gt;° retrieve the data from a database via wcf service via company framework: designer does NOT work ????&lt;br /&gt;&lt;br /&gt;Meaning it had to be something with the WCF service or the company framework, but since the program does work in runtime, this would be hard to pinpoint(maybe due to the security - login). So I tried another approach : The basic idea is that I want to make a screen, and preferably with some dummy data so I can use the designer. This data does not have to be data from the database. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt; : in design time the dataprovider may retrieve dummy data, in runtime it has to go via the wcf service to the database.&lt;br /&gt;And there may not be any code changes required after the design is done. Otherwise there is a risk of showing dummy data in a production environment!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution&lt;/b&gt; : different dataproviders.&lt;br /&gt;In the old way of working I had 1 dataprovider class, mostly called &lt;i&gt;DataProvider&lt;/i&gt;&lt;br /&gt;Now I split this up into 3 classes and 1 interface :&lt;br /&gt;° DataProvider : the one the xaml file(s) bind to like before.&lt;br /&gt;° DataProviderDesignTime : this one provides dummy data&lt;br /&gt;° DataProviderRunTime : this one goes via the wcf service to the database&lt;br /&gt;° IDataProvider : holds all the methods of the various dataproviders&lt;br /&gt;&lt;br /&gt;Way of working :&lt;br /&gt;° Dataprovider has a private variable of type &lt;i&gt;IDataprovider&lt;/i&gt;, initialised to DataProviderDesignTime.&lt;br /&gt;° At runtime, one of my first commands is to change this &lt;i&gt;IDataprovider&lt;/i&gt; in the Dataprovider class from design-time to run-time, via a shared function called SetRuntimeDataprovider&lt;br /&gt;&lt;br /&gt;Now this saves me a lot of time : I can finally use the designer !!&lt;br /&gt;And even the effect of convertes can be shown now, cool.&lt;br /&gt;&lt;br /&gt;The code &lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New" size="2"&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Class&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;WpfApplication8.Window1&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#ff0000"&gt;xmlns&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:x&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:lc&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;clr-namespace:WpfApplication8&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;Title&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Window1&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Height&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;300&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;300&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ObjectDataProvider &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;ListAllPersons&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#800080"&gt;ObjectType&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{x:Type lc:DataProvider}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#800080"&gt;MethodName&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;ListAllPersons&amp;quot;                            &lt;/FONT&gt;&lt;br /&gt;         &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;PersonTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Name}&amp;quot;   &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Age}&amp;quot;   &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox  &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;ItemsSource&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Source={StaticResource ListAllPersons}}&amp;quot; &lt;/FONT&gt;&lt;br /&gt;                  &lt;FONT COLOR="#800080"&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource PersonTemplate}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;br /&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New" size="2"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;WpfApplication8&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DataProvider&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private static &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;IDataprovider dp = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DataProviderDesignTime();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public static &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt; ListAllPersons()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;dp.ListAllPersons();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public static void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;SetRuntimeDataprovider()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;dp = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DataProviderRunTime();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;hr/&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"  size="2"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;WpfApplication8&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;interface &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;IDataprovider&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt; ListAllPersons();&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;hr/&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"  size="2"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;WpfApplication8&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DataProviderDesignTime : IDataprovider&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt; ListAllPersons()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt; result = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt;();&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;for &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;int &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;i = &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i &amp;lt; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;10&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i++)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;result.Add(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person { Name = &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Clone &amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;+ i.ToString(), Age = i });&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;result;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;hr/&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"  size="2"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Linq;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Text&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;WpfApplication8&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DataProviderRunTime : IDataprovider&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Person&amp;gt; ListAllPersons()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;// get the data &lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-7848440690574641535?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/7848440690574641535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2010/01/wpf-using-designer-with-design-time.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7848440690574641535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7848440690574641535'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2010/01/wpf-using-designer-with-design-time.html' title='WPF : Using the designer with design time data'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-7164118813959858777</id><published>2009-10-18T20:23:00.004+02:00</published><updated>2009-10-18T21:31:11.467+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customizing code'/><title type='text'>Working with the 1.5 code base : part 5</title><content type='html'>Away with the dreaded WPF, and back to good old CCNet coding ;-) &lt;br /&gt;This part will cover another updated part of the code : communication. In 1.5 Craig introduced messaging, &lt;a href="http://csut017.wordpress.com/2009/01/28/changing-to-messages/"&gt;Changing to Messages&lt;/a&gt;. As always Craigs blog is very informative in &lt;i&gt;what&lt;/i&gt; and &lt;i&gt;why&lt;/i&gt; he changes. I'll try to give a more hands-on example, so others can see more details and some code.&lt;br /&gt;The problem : In &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/CCNet+1.4.3+Release+Notes"&gt;CCNet 1.4.3&lt;/a&gt; I exposed the breakers of a build to cctray and the dashboard. &lt;a href="http://www.codeplex.com/Cradiator"&gt;Cradiator&lt;/a&gt; also uses this information. Now in CCNet 1.5 Craig, yes he again, exposed also the breaking tasks, which is good. But this introduced a problem : the xml feed Cradiator uses, only exposes the &lt;b&gt;last&lt;/b&gt; message! So this means that we show the breaker, &lt;b&gt;OR&lt;/b&gt; the breaking tasks. (also the dashboard has this problem for the moment)&lt;br /&gt;The solution is simple : expose all messages :-) This is  covered in &lt;a href="http://jira.public.thoughtworks.org/browse/CCNET-1718"&gt;Jira Issue 1718&lt;/a&gt;&lt;br /&gt;Anyway, this kind of information is stored in the &lt;i&gt;messages&lt;/i&gt; arraylist on the project being integrated. When a build is ok, we clear this list, when a build is bad, we look at the modifications, and extract the user names. The same goes for the tasks that failed. All this information is just a message in this arraylist. This also is a problem on its own. A message is just a text : &lt;i&gt;John Wayne Broke the build&lt;/i&gt;. You can not see what kind of information it is, only by parsing the text :-(&lt;br /&gt;&lt;br /&gt;Fixing the issue :&lt;h5&gt;Step 1 : add a type for each message &lt;/h5&gt;Currently I have these 4 types in an enum &lt;ul&gt;&lt;li&gt;NotDefined&lt;/li&gt;&lt;li&gt;Breakers&lt;/li&gt;&lt;li&gt;Fixer&lt;/li&gt;&lt;li&gt;FailingTasks&lt;/li&gt;&lt;/ul&gt; This is just adding a property with the enum to the message class&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New" size=2&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// The type of message&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;[&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;XmlText&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;]&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;MessageKind Kind&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;get { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;messageKind; }&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;set { messageKind = value; }&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;h5&gt;Step 2 : adjusting the communication&lt;/h5&gt;We need to update the &lt;i&gt;MessageRequest&lt;/i&gt; to have this new property also&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New" size=2&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// The kind of message&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;[&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;XmlElement&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;kind&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;)]&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Message&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.MessageKind Kind&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;get { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;kind; }&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;set { kind = value; }&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;Everywhere where we go from a &lt;i&gt;MessageRequest&lt;/i&gt; to a &lt;i&gt;Message&lt;/i&gt; we need to pass this new property value. This is in 1 place : &lt;b&gt;CruiseServer.cs&lt;/b&gt; in &lt;i&gt;public virtual Response SendMessage(MessageRequest request)&lt;/i&gt;&lt;br /&gt;The only thing left to do is specify the value of the type when we add a message to the list. For CCTray this is the option :&lt;i&gt;Volunteer to fix build&lt;/i&gt;, in the integration itself, we must add the correct value to the breakers and the failing tasks.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Step 3 : expose the messagelist&lt;/h5&gt;&lt;br /&gt;This is merely adding a new xml element, which is a list, nothing special.&lt;br /&gt;So in XmlReportAction.cs add this element :&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New" size=2&gt;&lt;FONT COLOR="#000000"&gt;xmlWriter.WriteStartElement(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;messages&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Message &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;m &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;status.Messages)&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;xmlWriter.WriteStartElement(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;message&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;xmlWriter.WriteAttributeString(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;text&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, m.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Text&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;xmlWriter.WriteAttributeString(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;kind&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, m.Kind.ToString());&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;xmlWriter.WriteEndElement();&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;xmlWriter.WriteEndElement();&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;Not so hard was it ?&lt;br /&gt;&lt;br /&gt;Stay tuned for more in the future ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-7164118813959858777?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/7164118813959858777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/working-with-15-code-base-part-5.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7164118813959858777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7164118813959858777'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/working-with-15-code-base-part-5.html' title='Working with the 1.5 code base : part 5'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-2779384550977545112</id><published>2009-10-15T19:52:00.003+02:00</published><updated>2009-10-15T20:04:23.542+02:00</updated><title type='text'>Wpf : Final encounter</title><content type='html'>I tried to enhance the display so that issues with attachments would have an icon (paperclip) next to it. To show and hide this image is easy, just use a converter. But getting the image to use an embedded resource was more difficult. For me this was the last drop. &lt;br /&gt;I quit this WPF stuff for the moment, maybe I take it up again later, when the tools are more to todays standard, but from what I heard about VS2010, I doubt that it will be in the near future. Anyone who wants to take a look at the code, you can find the project at : &lt;a href="https://sourceforge.net/projects/jirawpf/"&gt;Source Forge project&lt;/a&gt;&lt;br /&gt;svn repository : https://jirawpf.svn.sourceforge.net/svnroot/jirawpf&lt;br /&gt;&lt;br /&gt;maybe it needs some more comments, but you should get it to work.&lt;br /&gt;If there are questions about the project itself, feel free to ask, I'll try to answer them.&lt;br /&gt;&lt;br /&gt;Back to CCNet, that is a project I've neglected a bit, and needs some attention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-2779384550977545112?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/2779384550977545112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/wpf-final-encounter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2779384550977545112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2779384550977545112'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/wpf-final-encounter.html' title='Wpf : Final encounter'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-9069615732684122994</id><published>2009-10-02T20:50:00.003+02:00</published><updated>2009-10-02T22:16:58.928+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Wpf : style issues</title><content type='html'>Got the program almost like I want it. Encountered another big annoying WPF issue : &lt;br /&gt;&lt;b&gt;the order of the styles and datatemplates in a XAML file is of importance ! &lt;/b&gt;&lt;br /&gt;Take a look at the following example :&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueDataTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ContentControl &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueTemplate}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Property&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Control.Template&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;       &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;          &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;200&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;          &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;       &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;     &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;font size=+2&gt;&lt;b&gt;You get a freaking runtime error : Unable to find style IssueTemplate ! ! !&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;To fix it, place the style first in the file, and next the datatemplate.&lt;br /&gt;&lt;br /&gt;Questions :&lt;br /&gt;1) Why does it throw a runtime error, and not a compile error, it is a static resource, meaning that it is known at design time, it is not loaded via an assembly at runtime (late binding technology).&lt;br /&gt;2) Why an error in the first place? Back in 1990, it was of importance to place the procedures in correct order in the code, so the compiler could find them. But we're now in 2009! This is the way of working of 20 years ago! &lt;br /&gt;&lt;br /&gt;When you code in any .Net language, Delphi, C, VB6, VB5, VB4 or even COBOL  the place of a function in a class does not matter, hey even with partial classes, it does not even matter in which &lt;b&gt;file&lt;/b&gt; they are! But WPF fails if the order is not ok.&lt;br /&gt;&lt;br /&gt;I have a feeling that this issue will make the style files unorganized, and so making it errorprone :-(&lt;br /&gt;&lt;br /&gt;&lt;b&gt;sigh&lt;/b&gt; me wonder what is so fun and exciting about wpf, can someone enlighten me ? I do not grasp it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-9069615732684122994?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/9069615732684122994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/wpf-style-issues.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9069615732684122994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9069615732684122994'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/wpf-style-issues.html' title='Wpf : style issues'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-6198277713084187834</id><published>2009-10-02T12:35:00.002+02:00</published><updated>2009-10-02T13:08:59.916+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Getting it to work</title><content type='html'>Found the courage again to code in this WPF world.&lt;br /&gt;Reverted to use the &lt;i&gt;ItemTemplate&lt;/i&gt; in the listbox, to get it to work. But now I have double XAML code : a &lt;b&gt;datatemplate&lt;/b&gt; showing how a certain item is displayed, and a &lt;b&gt;style&lt;/b&gt; showing how a certain item is displayed. The solution for this is to let the &lt;i&gt;datatemplate&lt;/i&gt; use the style, so the layout is only defined once, like so :&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Property&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Control.Template&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;     &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;200&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Votes}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Assignee}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Created}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Priority}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Reporter}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Status}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Votes}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;     &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueDataTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;  &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ContentControl &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueTemplate}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;The issue with the double click is not relevant anymore, I wanted to show a second window on double clicking an issue, but changed my mind. Now when you select an item in the listbox, the details of the selected issue are shown at the top of the screen. This is done by adding a &lt;i&gt;ContentControl&lt;/i&gt; to the main window, binding its datacontext it to the same one as the listbox and setting the property &lt;i&gt;IsSynchronizedWithCurrentItem&lt;/i&gt; to &lt;b&gt;true&lt;/b&gt;. This works rather well. The code of the main window looks now like this :&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;VerticalContentAlignment&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Top&amp;quot; &lt;/FONT&gt;&lt;br /&gt;              &lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Left&amp;quot;  &lt;/FONT&gt;&lt;br /&gt;              &lt;FONT COLOR="#800080"&gt;DataContext&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProject}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ContentControl &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProjectTemplate}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ContentControl &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DataContext&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource AllIssues}&amp;quot; &lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#800080"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueDetailTemplate}&amp;quot; &lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Top&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox  &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Bottom&amp;quot; &lt;/FONT&gt;&lt;br /&gt;              &lt;FONT COLOR="#800080"&gt;ItemsSource&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Source={StaticResource AllIssues}}&amp;quot;  &lt;/FONT&gt;&lt;br /&gt;              &lt;FONT COLOR="#800080"&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueDataTemplate}&amp;quot; &lt;/FONT&gt;&lt;br /&gt;              &lt;FONT COLOR="#800080"&gt;IsSynchronizedWithCurrentItem&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;True&amp;quot;                          &lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;As you can see, there is nothing in the main window about &lt;i&gt;how&lt;/i&gt; a certain item is displayed, no coloring, borders, ... All this is done is in the styles. I'll see how far I get with this approach. I'm now busy with showing the details of a certain issue, when that is done the most important functionality of the program is done, making it possible to give the app a more polished look.&lt;br /&gt;Stay tuned ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-6198277713084187834?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/6198277713084187834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/getting-it-to-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/6198277713084187834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/6198277713084187834'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/10/getting-it-to-work.html' title='Getting it to work'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-72645639314538520</id><published>2009-09-11T08:54:00.005+02:00</published><updated>2009-09-15T08:55:58.522+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Struggling with basic behaviour</title><content type='html'>Ran into some problems again :-(.&lt;br /&gt;1) If I populate the listbox with lot's of items, let's say 200, it falls of the screen! &lt;br /&gt;In winforms I would expect a scrollbar to appear, but not in my WPF app :-(. So I added a &lt;i&gt;Scrollviewer&lt;/i&gt; around the listbox, but to no avail.&lt;br /&gt;After &lt;a href="http://arcanecode.com/2007/09/12/scrolling-in-wpf/"&gt;looking around&lt;/a&gt; on the net, it appears that the stackpanel is at fault, my Listbox resides in a StackPanel, and this combination makes the items of the listbox to go beyond the window edge.&lt;br /&gt;Solution : remove the stackpanel, this was not realy needed (yet) for my program, and when I do need a container control in the future, I'll use a &lt;i&gt;grid&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;2) Standard a listbox does not support double-click&lt;br /&gt;Surfs up : &lt;a href="http://kevin-berridge.blogspot.com/2008/06/wpf-listboxitem-double-click.html"&gt;listbox double click&lt;/a&gt;. You have to manually add the event.&lt;br /&gt;&lt;br /&gt;3) When I use the &lt;i&gt;ItemContainerStyle&lt;/i&gt; in stead of the &lt;i&gt;ItemTemplate&lt;/i&gt;, like said in the previous post, the listbox looses the ability to select items somehow. Go figure. If there is a soul out there, that can explain me the difference between &lt;i&gt;ItemContainerStyle&lt;/i&gt; and &lt;i&gt;ItemTemplate&lt;/i&gt;, please enlighten me.&lt;br /&gt;&lt;br /&gt;Now these are the kind of things that drive me nuts when I am programming in WPF !&lt;br /&gt;When coming from Windows Forms, I keep on stumbling on these basic stuff that is natively in windows forms, but not in WPF, I think I'll join the WPF Hate team, and stick to console and winforms. At least those work, no eye candy, but I can say it'll be finished in 2 days.&lt;br /&gt;&lt;br /&gt;I mean it is easy to create Star Wars like stuff in WPF, but real working apps, that remains to be seen. Ok, there are a lot of showcases to be found on the Net, but I wonder how many devs and designers where put on those projects. Also read &lt;a href="http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful-technology.html"&gt;this page&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;laying off for a while, getting too angry ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-72645639314538520?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/72645639314538520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/struggling-with-basic-behaviour.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/72645639314538520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/72645639314538520'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/struggling-with-basic-behaviour.html' title='Struggling with basic behaviour'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-7633161484805392272</id><published>2009-09-10T12:43:00.010+02:00</published><updated>2009-09-10T20:53:44.277+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Keeping the overview</title><content type='html'>The main window is getting into shape, but I do not like the Xaml code :-(. It's getting big, and I'm loosing the overview. Below is a small example of what I mean, the window just shows the CCNet project data, (name, description, ...) and a list of the issues (key, description, votes, ..)&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Class&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;JiraWpf.Window2&amp;quot;&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#ff0000"&gt;xmlns&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#800080"&gt;xmlns:x&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#800080"&gt;xmlns:lc&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;clr-namespace:JiraWpf&amp;quot;&lt;/FONT&gt;&lt;br /&gt;   &lt;FONT COLOR="#800080"&gt;Title&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Window2&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ObjectDataProvider &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;CCNetProject&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;ObjectType&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{x:Type lc:CCNetJiraDataProvider}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;MethodName&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;GetCCNetProject&amp;quot;&lt;/FONT&gt;&lt;br /&gt;          &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ObjectDataProvider &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;AllProjects&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;ObjectType&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{x:Type lc:CCNetJiraDataProvider}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;MethodName&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;GetProjects&amp;quot;&lt;/FONT&gt;&lt;br /&gt;          &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ObjectDataProvider &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;AllIssues&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;ObjectType&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{x:Type lc:CCNetJiraDataProvider}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                           &lt;FONT COLOR="#800080"&gt;MethodName&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;GetIssuesFromFilter&amp;quot;&lt;/FONT&gt;&lt;br /&gt;          &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;200&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Votes}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Summary}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;VerticalContentAlignment&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Center&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Left&amp;quot;  &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DataContext&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProject}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Vertical&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Lead}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Name}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Top&amp;quot; &lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#800080"&gt;ItemsSource&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Source={StaticResource AllIssues}}&amp;quot;  &lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#800080"&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueTemplate}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt; As you can see, that is getting big, and it shows almost nothing :-( Time to clean house! &lt;br /&gt;First thing I do not like is the difference of showing data between the &lt;i&gt;listbox&lt;/i&gt; and the &lt;i&gt;expander&lt;/i&gt;. I prefer the one of the listbox, where you say that the items have the specified template, leaving the actual layout out of the overview.&lt;br /&gt;Downside is that &lt;i&gt;Expander&lt;/i&gt; does not have an ItemTemplate property, and creating that property and functionality on all kind of controls does not sound as an attractive solution. The good news is that does exist already, WPF has this functionality build in : you just have to use basic controls and styles ! &lt;br /&gt;Now that is what I like : basic controls. Never thought that I would ever say :  I like something about WPF ;-) &lt;br /&gt;So I created a style that just sets the &lt;i&gt;Control.Template&lt;/i&gt; property, this allows to easily create a visualisation of a certain item, the way like the it is done with a &lt;i&gt;DataTemplate&lt;/i&gt;. And this style is applied to a &lt;i&gt;ContentControl&lt;/i&gt; residing in the expander. This is already better, but now I have a style and a datatemplate to visualise data, and personally I do not like 2 ways of doing the same stuff in 1 program. So I changed the &lt;i&gt;DataTemplate&lt;/i&gt; also into a style. This means that I have to use the &lt;i&gt;ItemContainerStyle&lt;/i&gt; property in stead of the &lt;i&gt;ItemTemplate&lt;/i&gt; in the listbox. &lt;br /&gt;That being done, the way of presentation is more consistent, but the file is still rather big. It would be nice if the resources where moved into a separate file, or set of files, and luckily this is also supported out of the box with the &lt;i&gt;ResourceDictionary.MergedDictionaries&lt;/i&gt;. Resulting in the following for the window.xaml&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Class&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;JiraWpf.Window1&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#ff0000"&gt;xmlns&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:x&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:lc&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;clr-namespace:JiraWpf&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;Title&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Window1&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;MergedDictionaries&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Source&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Resources/DataProvider.xaml&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Source&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Resources/DataLayout.xaml&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;MergedDictionaries&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;VerticalContentAlignment&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Center&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Left&amp;quot;  &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DataContext&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProject}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ContentControl &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProjectTemplate}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Expander&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Top&amp;quot; &lt;/FONT&gt;&lt;br /&gt;                     &lt;FONT COLOR="#800080"&gt;ItemsSource&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Source={StaticResource AllIssues}}&amp;quot;  &lt;/FONT&gt;&lt;br /&gt;                     &lt;FONT COLOR="#800080"&gt;ItemContainerStyle&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource IssueTemplate}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                     &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;As you can see, a lot shorter and more easily to follow. Below is the DataLayout.xaml file, I did not post the DataProvider.xaml file, because it is just a copy and paste of all the ObjectDataProviders into an empty &lt;i&gt;ResourceDictionary&lt;/i&gt; file.&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary &lt;/FONT&gt;&lt;FONT COLOR="#ff0000"&gt;xmlns&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:x&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;CCNetProjectTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Property&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Control.Template&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Vertical&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Lead}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Name}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;IssueTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Property&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Control.Template&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;200&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Votes}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Summary}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ControlTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Value&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Setter&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Style&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ResourceDictionary&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;Now this looks like it is more manageable. Stay tuned ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-7633161484805392272?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/7633161484805392272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/keeping-overview.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7633161484805392272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/7633161484805392272'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/keeping-overview.html' title='Keeping the overview'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-2400276952610938979</id><published>2009-09-07T13:24:00.007+02:00</published><updated>2009-09-07T19:46:27.271+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Binding data with INotifyPropertyChanged</title><content type='html'>Wpf can only bind to properties, and in order to let it automatically refresh the UI when a bound data item changes value, it must implement the &lt;i&gt;INotifyPropertyChanged&lt;/i&gt; property. &lt;br /&gt;This means that the following code does not suffice : &lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{ &lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Name { get; set; }&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;So let's implement the interface, this leads us to the following :&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;ComponentModel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person : INotifyPropertyChanged&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public event &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;PropertyChangedEventHandler PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{ }&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Name&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;get { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name; }&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;set         &lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{ &lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(value != &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.name)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.name = value;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Name&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;));&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}            &lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;args)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;var handler = PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(handler == &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;) &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;handler(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, args);&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;Not a big change, but if you have a lot of properties, this is very bad. We came from a 1 line property implementation to a 13 line !! The lines for the event and raising it are common for all properties, so they are not counted. Every property compares its value with the previous value, and when those 2 are different it raise the change-event. This is functionality that is the same for all properties so it belongs somewhere else. It would be handy if an attribute &lt;i&gt;NotifyOnChange&lt;/i&gt; could be set on a property, but this does not exist (as far as I know). Meaning this comparison must be done in a self made base class : &lt;i&gt;NotifyingObject&lt;/i&gt;, leading us to the following :&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;ComponentModel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;NotifyingObject : INotifyPropertyChanged&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Dictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, IComparable&amp;gt; props;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public event &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;PropertyChangedEventHandler PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;NotifyingObject()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;props = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Dictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, IComparable&amp;gt;();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;SetValue&amp;lt;T&amp;gt;(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name, T value) where T : IComparable&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!props.ContainsKey(name))&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;props.Add(name, value);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(props[name].CompareTo(value) != &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;props[name] = value;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(name));&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;T GetValue&amp;lt;T&amp;gt;(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name) where T : IComparable&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(T)props[name];&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;  &lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;protected void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;args)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;var handler = PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(handler == &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;) &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;handler(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, args);&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;ComponentModel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person : NotifyingObject&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{ }&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Name&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;get { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return base&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.GetValue&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Name&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;); }&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;set { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;base&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.SetValue(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Name&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, value); }&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;Ok, this is already much better, property definitions are back to just 5 lines, but at least it is readable again. The &lt;i&gt;NotifyingObject&lt;/i&gt; has a list of the property names and their values, so on a get, we look up the value in the list. On a set we compare with the value in the list, and when the 2 are different, we raise the event.&lt;br /&gt;Now what still bothers me on this is that we type the property name 3 times in the &lt;i&gt;Person&lt;/i&gt; class! Once in the property name itself, secondly in the &lt;i&gt;get&lt;/i&gt; and another time in the &lt;i&gt;set&lt;/i&gt;. This is asking for trouble on refactoring (renaming the property). No tool will change those names in the get and set, they are hardcoded string values ! This leads us to the following implementation of the 2 classes :&lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;ComponentModel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;NotifyingObject : INotifyPropertyChanged&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Dictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, IComparable&amp;gt; props;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public event &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;PropertyChangedEventHandler PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;NotifyingObject()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;props = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Dictionary&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, IComparable&amp;gt;();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;SetValue&amp;lt;T&amp;gt;(T value) where T : IComparable&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name = GetCallerPropertyName();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!props.ContainsKey(name))&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;props.Add(name, value);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(props[name].CompareTo(value) != &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;props[name] = value;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(name));&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;T GetValue&amp;lt;T&amp;gt;() where T : IComparable&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;name = GetCallerPropertyName();&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(T)props[name];&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;protected void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;OnPropertyChanged(&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;PropertyChangedEventArgs &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;args)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;var handler = PropertyChanged;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(handler == &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;) &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;handler(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, args);&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;GetCallerPropertyName()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Diagnostics&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackTrace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;stack = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Diagnostics&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackTrace&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;();&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Diagnostics&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackFrame &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;currentFrame = stack.GetFrame(&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;2&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;//strip of the set_ and get_  prefixes of the generated property names, to get the ones you typed&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;propname = currentFrame.GetMethod().Name.Substring(&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;4&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;propname;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;ComponentModel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;JiraWpf.DataObjects&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person : NotifyingObject&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Person()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{ }&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Name&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;get { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return base&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.GetValue&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;gt;(); }&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;set { &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;base&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.SetValue(value); }&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;We let the &lt;i&gt;NotifyingObject&lt;/i&gt; look up the property name itself, preventing us from ever typing in a wrong name. This is now safe for refactoring.&lt;br /&gt;Another benefit of the &lt;i&gt;NotifyingObject&lt;/i&gt; is that you could foresee a way to postpone the raise event till all properties are set, a &lt;i&gt;BeginUpdate&lt;/i&gt; and &lt;i&gt;EndUpdate&lt;/i&gt; function could foresee that. Implementing extra logging is now also much easier. Anyway, with this baseclass ready, I can start working on the next part.&lt;br /&gt;Stay tuned ....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-2400276952610938979?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/2400276952610938979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/binding-data-with-inotifypropertychange.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2400276952610938979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/2400276952610938979'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/binding-data-with-inotifypropertychange.html' title='Binding data with INotifyPropertyChanged'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-3513818396554253708</id><published>2009-09-06T20:50:00.005+02:00</published><updated>2009-09-06T22:07:16.263+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Wpf : what you really need to understand first is databinding</title><content type='html'>Learning the basics layout of a WPF program is not that difficult, I mean how to place basic controls like buttons, labels, textboxes, ... Making a great interface is something else, but that requires other skills, UI designer skills. But what I think is the most important part to understand early is the binding. This is the part of the course / book that I advise you to spent the most time on. I've lost too many hours finding out why my data was not visualised :&lt;br /&gt;° Compilation : 0 warnings, 0 errors&lt;br /&gt;° Setting a breakpoint on the method that delivered the data : breakpoint was never hit&lt;br /&gt;° Output window did not show any errors, warnings&lt;br /&gt;° Settings the ItemsSource in code behind works like a charm, so the data providing method works !&lt;br /&gt;&lt;br /&gt;Below is an example program, see if you can find the mistake. &lt;br /&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Class&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Damn.Window1&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#ff0000"&gt;xmlns&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:x&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;xmlns:lc&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;clr-namespace:Damn&amp;quot; &lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#800080"&gt;Title&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Window1&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ObjectDataProvider &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;CCNetProject&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#800080"&gt;ObjectType&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{x:Type lc:CCNetJiraDataProvider}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#800080"&gt;MethodName&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;GetProjects&amp;quot;&lt;/FONT&gt;&lt;br /&gt;           &lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Key&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;CCNetProjectTemplate&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Horizontal&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Background&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;LightBlue&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Key}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Width&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;200&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;                &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Label &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Content&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding Description}&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;            &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;DataTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Resources&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;DockPanel&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Dock&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Top&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;Orientation&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Vertical&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;        &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;ListBox &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;x:Name&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;lstY&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                         &lt;FONT COLOR="#800080"&gt;ItemsSource&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{Binding StaticResource CCNetProject}&amp;quot;&lt;/FONT&gt;&lt;br /&gt;                         &lt;FONT COLOR="#800080"&gt;ItemTemplate&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;=&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{StaticResource CCNetProjectTemplate}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;/&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;    &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;StackPanel&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Window&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;So this has kept me busy for some hours, ok the mistake was mine, but how could I have found the error more easily?&lt;br /&gt;I can not set a breakpoint in XAML, and setting a breakpoint in the method did not get hit. How do other WPF programmers pinpoint these kind of problems. For me this is a serious problem / shortcoming in Visual Studio. Any body knows some tips/tricks ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-3513818396554253708?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/3513818396554253708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/wpf-what-you-really-need-to-understand.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/3513818396554253708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/3513818396554253708'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/wpf-what-you-really-need-to-understand.html' title='Wpf : what you really need to understand first is databinding'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-8069721562089871115</id><published>2009-09-04T15:34:00.004+02:00</published><updated>2009-09-04T19:54:48.833+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wpf Encounter'/><title type='text'>Wpf : learning new grounds</title><content type='html'>Part of my main job involves WPF, which I find hard to learn, coming from winforms and making mostly console utility apps (no events flying around). So I needed a pet project to learn this. I looked at CCNet, it has no WPF frontend, but that already exists, &lt;a href="http://www.codeplex.com/BigVisibleCruise"&gt;Cradiator&lt;/a&gt; aka BVC2, so another candidate had to be found. &lt;br /&gt;&lt;br /&gt;A painpoint for me as developper on CCNet is to find items which have patches, our &lt;a href="http://jira.public.thoughtworks.org/secure/BrowseProject.jspa?id=10000"&gt;Jira Issue site&lt;/a&gt; has many search options, but that one is not provided. The good point is that there is a wsdl connection available to the issue tracker, which has this possibility ! An issue has an &lt;i&gt;Attachements&lt;/i&gt; property, which is a list of strings, the filenames! &lt;br /&gt;Basically all I need to do is get all open items, and filter out the ones where &lt;code&gt;Attachements.Length != 0 &lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;The console version was finished in half an hour, the WPF, I'm still working on :-(&lt;br /&gt;Details will follow in next posts. I'm also taking this project as a way to improve my knowledge of other items like patterns, refactoring, ...&lt;br /&gt;And I want to do this project the 'WPF way', not winform like. &lt;br /&gt;&lt;br /&gt;Do not worry, I'll keep working on CCNet to :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-8069721562089871115?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/8069721562089871115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/wpf-learning-new-grounds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8069721562089871115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/8069721562089871115'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/09/wpf-learning-new-grounds.html' title='Wpf : learning new grounds'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-9032378160537536815</id><published>2009-08-10T09:28:00.006+02:00</published><updated>2009-08-10T22:19:24.125+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CI'/><category scheme='http://www.blogger.com/atom/ns#' term='CCNet'/><title type='text'>Continous Installation : How it works</title><content type='html'>It's been a while since my last post ;-) but here is a new one. This post will give more detailed information of the setup I have to install software on 75 servers, and keep an eye on them. As you know, I use CCNet for distributing our software to our customers (about 70 for the moment). These installations involve click-once applications, database upgrades, server checks, ....&lt;br /&gt;&lt;br /&gt;I made a presentation in &lt;a href="http://users.telenet.be/williams/Blog/ContinuousInstallation.odp"&gt;openoffice&lt;/a&gt; and &lt;a href="http://users.telenet.be/williams/Blog/ContinuousInstallation.ppt"&gt;ms office&lt;/a&gt; so you can have a look, download the format of your choice and start the presentation (F5). Here's a short overview of the presentation :&lt;ul&gt;&lt;li&gt;Company is connected to an external Ftp Server via the Internet&lt;/li&gt;&lt;li&gt;Customers have an application server with CCNet pre-installed, which will connect at pre-defined times (schedule trigger) with the Ftp server&lt;/li&gt;&lt;li&gt;When there is a need for a change (new installation/ program),we upload a modified ccnet.config and the needed files.&lt;/li&gt;&lt;li&gt;When the schedule trigger fires, CCNet.Config is downloaded, and copied to the path where CCNet watches it. Meaning the new configuration will be read&lt;/li&gt;&lt;li&gt;If it needs, other files are also downloaded and executed / installed &lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;Now, the 10 point question : &lt;br /&gt;how do we know if an installation was ok, the server was updated, ... ?&lt;br /&gt;At preset times, about 7 times a day, each appserver uploads the state of its CCNet service, this is the data you can see in the dashboard. This data is downloaded to the company and processed. &lt;br /&gt;So we see if the update was ok ('build' ok or failed), and if the update was done or not, via the last executed time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5439084187135612209-9032378160537536815?l=rubenwillems.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rubenwillems.blogspot.com/feeds/9032378160537536815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://rubenwillems.blogspot.com/2009/08/continous-installation-how-it-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9032378160537536815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5439084187135612209/posts/default/9032378160537536815'/><link rel='alternate' type='text/html' href='http://rubenwillems.blogspot.com/2009/08/continous-installation-how-it-works.html' title='Continous Installation : How it works'/><author><name>Ruben Willems</name><uri>http://www.blogger.com/profile/12344517228534161773</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5439084187135612209.post-3236214692294009101</id><published>2009-06-26T15:53:00.003+02:00</published><updated>2009-06-26T22:25:58.502+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customizing code'/><title type='text'>Working with the 1.5 code base : part 4</title><content type='html'>In this part I will cover the FTP Source Control. At the base it is not that hard, since most of the stuff we already have :-). I added a class &lt;i&gt;'FtpSourceControl'&lt;/i&gt; that implements &lt;i&gt;ISourceControl&lt;/i&gt;. This interface has the following definition:&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;public interface &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ISourceControl&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#000000"&gt;Modification[] GetModifications(IIntegrationResult from, IIntegrationResult to);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LabelSourceControl(IIntegrationResult result);&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;GetSource(IIntegrationResult result);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Initialize(IProject project);&lt;/FONT&gt;&lt;br /&gt; &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Purge(IProject project);&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;br /&gt;The only item we do not have is the &lt;i&gt;GetModifications&lt;/i&gt; in IFtpLib, so this needs an update : &lt;code&gt;Modification[] ListNewOrUpdatedFilesAtFtpSite(string localFolder, string remoteFolder, bool recursive);&lt;/code&gt;&lt;br /&gt;The implementation of this method, is also very easy, it is the same as the download, except that it does not need to retieve the file, only list it.&lt;br /&gt;And that is it, easy. Ok, this code still needs some cleanup, but it shows how you can create new functionality for CCNet, step by step.&lt;br /&gt;The part where you are waiting on :&lt;br /&gt;&lt;h4&gt;The code&lt;/h4&gt;&lt;h5&gt;IFtpLib&lt;/h5&gt;&lt;TABLE bgcolor="#FFFFFF"&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;using &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;interface &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;IFtpLib&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// Logs into the specified server, with the userName and password&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// If activeConnectionMode is set to true, active connection is used,&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// otherwise passive connection.  &lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;serverName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;userName&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;password&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;activeConnectionMode&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LogIn(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;serverName, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;userName, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;password, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;activeConnectionMode);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// Disconnects from the server&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DisConnect();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// returns true if connected&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;IsConnected();&lt;/FONT&gt;&lt;br /&gt;        &lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// returns the current path of the server&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;CurrentWorkingFolder();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// downloads the remoter folder to the local folder, recursive if wanted&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;localFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;remoteFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;recursive&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DownloadFolder(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// Uploads a local folder to the specified remotefolder, recursive if wanted&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;remoteFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;localFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;recursive&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;UploadFolder(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// Returns a list of new or updated files at the ftp site, compared to a local folder&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;localFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;remoteFolder&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;param name=&amp;quot;recursive&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;Modification[] ListNewOrUpdatedFilesAtFtpSite(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive);&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;h5&gt;FtpLib&lt;/h5&gt;&lt;TABLE bgcolor="#FFFFFF" &gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE&gt;&lt;FONT FACE="Courier New"&gt;&lt;FONT COLOR="#0000ff"&gt;namespace &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ThoughtWorks.CruiseControl.Core.Util&lt;/FONT&gt;&lt;br /&gt;&lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#0000ff"&gt;public class &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpLib : IFtpLib&lt;/FONT&gt;&lt;br /&gt;    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnection FtpServer;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Tasks.TaskBase CallingTask;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Util.BuildProgressInformation bpi;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpLib(Tasks.TaskBase callingTask, Util.BuildProgressInformation buildProgressInformation)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;CallingTask = callingTask;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;bpi = buildProgressInformation;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnection();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ReplyReceived += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.CommandSent += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.Downloaded += &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFileTransferEventHandler(FtpServer_Downloaded);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.Uploaded += &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFileTransferEventHandler(FtpServer_Uploaded);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpLib(Util.BuildProgressInformation buildProgressInformation)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;bpi = buildProgressInformation;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnection();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ReplyReceived += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.CommandSent += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpLib()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnection();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ReplyReceived += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.CommandSent += HandleMessages;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LogIn(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;serverName, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;userName, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;password, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;activeConnectionMode)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Info(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Connecting to {0} ...&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, serverName);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ServerAddress = serverName;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.UserName = userName;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.Password = password;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.Connect();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(activeConnectionMode)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Active mode enabled&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ConnectMode = EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnectMode.ACTIVE;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Passive mode enabled&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ConnectMode = EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPConnectMode.PASV;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.TransferType = EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPTransferType.BINARY;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DownloadFolder(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] FtpServerFileInfo = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.GetFileInfos();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;default&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(localFolder))&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;creating {0}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, localFolder);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.CreateDirectory(localFolder);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile CurrentFileOrDirectory &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpServerFileInfo)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(recursive)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Dir &amp;amp;&amp;amp; CurrentFileOrDirectory.Name != &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;.&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;amp;&amp;amp; CurrentFileOrDirectory.Name != &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;..&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;)&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Format(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{0}/{1}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, remoteFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(LocalTargetFolder))&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;creating {0}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, LocalTargetFolder);&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.CreateDirectory(LocalTargetFolder);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;DownloadFolder(LocalTargetFolder, FtpTargetFolder, recursive);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#008000"&gt;//set the ftp working folder back to the correct value&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!CurrentFileOrDirectory.Dir)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;LocalFile = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#008000"&gt;// check file existence&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;File&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(LocalFile))&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#008000"&gt;//check file size&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(LocalFile);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Size != fi.Length)&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;File&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Delete(LocalFile);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008000"&gt;//check modification time&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.LastModified != fi.CreationTime)&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                                &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                                &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;File&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Delete(LocalFile);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(DownloadFile)&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Downloading {0}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.DownloadFile(localFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(LocalFile);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi.CreationTime = CurrentFileOrDirectory.LastModified;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi.LastAccessTime = CurrentFileOrDirectory.LastModified;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi.LastWriteTime = CurrentFileOrDirectory.LastModified;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;UploadFolder(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;[] LocalFiles = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;LocalFiles = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.GetFiles(localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;*.*&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;// remove the local folder value, so we can work relative&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;for &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;int &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;i = &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i &amp;lt;= LocalFiles.Length - &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i++)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;LocalFiles[i] = LocalFiles[i].Remove(&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, localFolder.Length + &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;//upload files&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;//FtpServer.Exists throws an error, so we must do it ourselves&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] FtpServerFileInfo = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.GetFileInfos();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(var LocalFile &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalFiles)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!FileExistsAtFtp(FtpServerFileInfo, LocalFile))&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.UploadFile(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, LocalFile), LocalFile);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(FileIsDifferentAtFtp(FtpServerFileInfo, LocalFile, localFolder))&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.DeleteFile(LocalFile);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.UploadFile(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, LocalFile), LocalFile);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!recursive) &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;return&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;//upload folders&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;[] Folders = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;Folders = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.GetDirectories(localFolder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#008000"&gt;// remove the local folder value, so we can work relative&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;for &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;int &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;i = &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i &amp;lt;= Folders.Length - &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;; i++)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;Folders[i] = Folders[i].Remove(&lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;0&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, localFolder.Length + &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(var Folder &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Folders)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#008000"&gt;//explicit set the folder back, because of recursive calls&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!FolderExistsAtFtp(FtpServerFileInfo, Folder))&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.CreateDirectory(Folder);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, Folder);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Format(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{0}/{1}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, remoteFolder, Folder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;UploadFolder(FtpTargetFolder, LocalTargetFolder, recursive);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DisConnect()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.Close();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;IsConnected()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.IsConnected;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;CurrentWorkingFolder()&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ServerDirectory;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;public &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Modification[] ListNewOrUpdatedFilesAtFtpSite(&lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Modification&amp;gt; mods = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Modification&amp;gt;();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;GetTheList(mods, localFolder, remoteFolder, recursive);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;mods.ToArray();&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private void &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;GetTheList(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Collections&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Generic&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;List&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;lt;Modification&amp;gt; mods, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;remoteFolder, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;recursive)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] FtpServerFileInfo = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.GetFileInfos();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;LocalFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;default&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(localFolder))&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;creating {0}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, localFolder);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.CreateDirectory(localFolder);&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile CurrentFileOrDirectory &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FtpServerFileInfo)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(recursive)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Dir &amp;amp;&amp;amp; CurrentFileOrDirectory.Name != &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;.&amp;quot; &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;&amp;amp;&amp;amp; CurrentFileOrDirectory.Name != &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;..&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;)&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;LocalTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;FtpTargetFolder = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Format(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;{0}/{1}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, remoteFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(LocalTargetFolder))&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008080"&gt;Log&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Debug&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;creating {0}&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, LocalTargetFolder);&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Directory&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.CreateDirectory(LocalTargetFolder);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;GetTheList(mods, LocalTargetFolder, FtpTargetFolder, recursive);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                        &lt;FONT COLOR="#008000"&gt;//set the ftp working folder back to the correct value&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;this&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.FtpServer.ChangeWorkingDirectory(remoteFolder);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!CurrentFileOrDirectory.Dir)&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;Modification m = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Modification();&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;LocalFile = &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Path&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Combine(localFolder, CurrentFileOrDirectory.Name);&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#008000"&gt;// check file existence&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;File&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Exists(LocalFile))&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;m.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Type &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;= &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;added&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#008000"&gt;//check file size&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;new &lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(LocalFile);&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Size != fi.Length)&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;m.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Type &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;= &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Updated&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#008000"&gt;//check modification time&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.LastModified != fi.CreationTime)&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                                &lt;FONT COLOR="#000000"&gt;DownloadFile = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                                &lt;FONT COLOR="#000000"&gt;m.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;Type &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;= &lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;Updated&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(DownloadFile)&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;m.FileName = CurrentFileOrDirectory.Name;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;m.FolderName = remoteFolder;&lt;/FONT&gt;&lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;m.ModifiedTime = CurrentFileOrDirectory.LastModified;&lt;/FONT&gt;&lt;br /&gt;                        &lt;br /&gt;                        &lt;FONT COLOR="#000000"&gt;mods.Add(m);&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FileExistsAtFtp(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] ftpServerFileInfo, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFileName)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Found = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile CurrentFileOrDirectory &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ftpServerFileInfo)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(!CurrentFileOrDirectory.Dir &amp;amp;&amp;amp; CurrentFileOrDirectory.Name.ToLower() == localFileName.ToLower())&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;Found = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Found;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FolderExistsAtFtp(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] ftpServerFileInfo, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFileName)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Found = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;updatedFolderName = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;null&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;foreach &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile CurrentFileOrDirectory &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;in &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;ftpServerFileInfo)&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Name.EndsWith(&lt;/FONT&gt;&lt;FONT COLOR="#ff00ff"&gt;&amp;quot;/&amp;quot;&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;))&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;updatedFolderName = CurrentFileOrDirectory.Name.Remove(CurrentFileOrDirectory.Name.Length - &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;, &lt;/FONT&gt;&lt;FONT COLOR="#800080"&gt;1&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;);&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;else&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;updatedFolderName = CurrentFileOrDirectory.Name;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;                &lt;FONT COLOR="#0000ff"&gt;if &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(CurrentFileOrDirectory.Dir &amp;amp;&amp;amp; updatedFolderName.ToLower() == localFileName.ToLower())&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;                    &lt;FONT COLOR="#000000"&gt;Found = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;true&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;                &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;return &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;Found;&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;}&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;        &lt;FONT COLOR="#0000ff"&gt;private bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;FileIsDifferentAtFtp(EnterpriseDT.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;Net&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.Ftp.FTPFile[] ftpServerFileInfo, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFile, &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;string &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;localFolder)&lt;/FONT&gt;&lt;br /&gt;        &lt;FONT COLOR="#000000"&gt;{&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#0000ff"&gt;bool &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;isDifferent = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;false&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;;&lt;/FONT&gt;&lt;br /&gt;            &lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;IO&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&gt;&lt;FONT COLOR="#808000"&gt;FileInfo &lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;fi = &lt;/FONT&gt;&lt;FONT COLOR="#0000ff"&gt;default&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;(&lt;/FONT&gt;&lt;FONT COLOR="#008080"&gt;System&lt;/FONT&gt;&lt;FONT COLOR="#000000"&gt;.&lt;/FONT&g
