<?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-3344020922522885132</id><updated>2011-09-13T00:14:55.237+02:00</updated><category term='AOP'/><category term='Visual Studio'/><category term='MEF'/><category term='PDC 2008'/><category term='Team Foundation Server'/><category term='Architecture'/><category term='Oslo'/><category term='BCS'/><category term='WorkFlow Foundation'/><category term='UnitTesting'/><category term='Service Bus'/><category term='Reactive Framework'/><category term='Pageflow'/><category term='Windows Azure'/><category term='SharePoint 2010'/><category term='MSBuild'/><category term='WPF'/><category term='Presentations'/><category term='BizTalk 2009'/><category term='.NET'/><category term='Silverlight'/><category term='XAML'/><title type='text'>Imagination is more important than knowledge.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-4574171102151277462</id><published>2010-12-16T16:51:00.001+01:00</published><updated>2010-12-16T16:56:15.531+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2009'/><title type='text'>Build a BizTalk 2009 solution with MSBuild 4.0</title><content type='html'>&lt;p&gt;I’ve been working on a MSBuild 4.0 script to build our entire product tree. The product tree contains multiple solutions in .NET 3.5, Silverlight 3.0, .NET 4.0 and BizTalk 2009. Most of it wasn’t that hard, the real exception was to let MSBuild build the BizTalk 2009 solutions.&lt;/p&gt;  &lt;p&gt;When you build a BizTalk 2009 solution with MSBuild 4.0 you’ll probably get all sorts of messages telling you that MSBuild found 2 versions of System.XML, System.Diagnostics. One version is the correct .NET 2.0 version and the other is the .NET 4.0 version. Why MSBuild doesn’t understand that a .NET 3.5 solution won’t reference a .NET 4.0 assembly is beyond me. The worst part is: There is no way to tell MSBuild which specific assembly you want to reference.&lt;/p&gt;  &lt;p&gt;There is a solution only you’ll need to edit your BizTalk project. In the Program Files\MSBuild\Microsoft\BizTalk directory there are two MSBuild target files (BizTalkC.targets and BizTalkCommon.targets). The BizTalk.Common.targets file contains a task AddHiddenReferences. This task will avoid the BizTalk task adding the 4.0 references on hosts with both .NET 3.5 and .NET 4.0 installed.&lt;/p&gt;  &lt;p&gt;If you unload your *.btproj files that have a reference to Microsoft.XLANGs.BaseTypes and open it with the XML Editor. Edit your btproj files so they will look something like this:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ee8d9719-33fd-46e5-bac1-56ed0354b927" class="wlWriterEditableSmartContent"&gt;&lt;pre style=" width: 570px; height: 419px;background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;overflow: auto;;font-family:Microsoft Sans Serif;font-size:7,2"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; other *.btsproj file stuff &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.XLANGs.BaseTypes&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Microsoft.XLANGs.BaseTypes&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.BizTalk.Interop.Agent&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.BizTalk.Pipeline&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.BizTalk.Messaging&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.XLANGS.BizTalk.ProcessInterface&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.RuleEngine&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.XLANGs.RuntimeTypes&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.XLANGs.Engine&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Reference &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Include&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Microsoft.XLANGs.BizTalk.Engine&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ItemGroup&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; other *.btsproj file stuff &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt; AddHiddenReferences will avoid adding the .NET 4.0 references &lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Target &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;AddHiddenReferences&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Project&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;Reload your project file and build the solution. You will notice that you will have to add a reference to System.Web.Services. After this your solution will build and this solution will also build in MSBuild 4.0.&lt;br /&gt;&lt;br /&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-4574171102151277462?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/4574171102151277462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2010/12/build-biztalk-2009-solution-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/4574171102151277462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/4574171102151277462'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2010/12/build-biztalk-2009-solution-with.html' title='Build a BizTalk 2009 solution with MSBuild 4.0'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-8351762653827238338</id><published>2010-08-04T10:09:00.001+02:00</published><updated>2010-08-04T10:10:05.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Difference in MSBuild and Visual Studio Build?</title><content type='html'>I'm working on a MSBuild script that will retrieve all the sources from TFS and build all the Solutions. To my surprise one of my MSBuild scripts raised errors on a solution that was building fine in Visual Studio. In MSBuild I got the following error: &lt;i&gt;"The type or namespace name "name" does not exist in the namespace "namespace". (Are you missing an assembly reference?)"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;After a long hard search I found a stray projectreference in a project file (*.csproj). Usually all the References and Projectreferences are packed together in one ItemGroup, but in this specific project file there was one ProjectReference in a seperate ItemGroup at the end of the file. This was exactly the project that contained the namespace "name". I copied the ProjectReference to the ItemGroup containing all the other References and deleted the stray ItemGroup. This fixed the MSBuild errors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-8351762653827238338?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/8351762653827238338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2010/08/difference-in-msbuild-and-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8351762653827238338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8351762653827238338'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2010/08/difference-in-msbuild-and-visual-studio.html' title='Difference in MSBuild and Visual Studio Build?'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-8665316915006897636</id><published>2010-07-29T12:34:00.000+02:00</published><updated>2010-07-29T12:34:30.719+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UnitTesting'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Foundation Server'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>UnitTests and Code Coverage in TFS Build 2008</title><content type='html'>The last couple of days I've been working on getting code coverage results from unittests in automated TFS builds. Getting the code coverage results in Visual Studio 2008 is very straightforward:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Double click on the LocalTestRun.testrunconfig&lt;/li&gt;&lt;li&gt; Go to "Code Coverage"&lt;/li&gt;&lt;li&gt;Select the artifacts to instrument (dll's)&lt;/li&gt;&lt;li&gt;Enter the path to the resigning key file&lt;/li&gt;&lt;li&gt;Click "Apply" and "Close"&lt;/li&gt;&lt;/ul&gt;Everything is now set up to run the UnitTests with the instrumentation for code coverage.After you run your UnitTests, left click on a TestResult and open the Code Coverage Results.&lt;br /&gt;&lt;br /&gt;Getting the Code Coverage Results in the Automated TFS Build is a bit tricky. &lt;br /&gt;Open the TFSBuild file and add the following line in the PropertyGroup node:&amp;nbsp; "&lt;runtest&gt;&amp;lt;RunTest&lt;/runtest&gt;&amp;gt;&lt;runtest&gt;true&lt;/runtest&gt;&amp;lt;/RunTest&amp;gt;"&lt;br /&gt;&lt;br /&gt;In the ItemGroup for UnitTesting add the following lines (if you have multiple unittest projects in your Build, add one for each unittest project)&lt;br /&gt;&lt;br /&gt;&amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;MetaDataFile Include="$(FolderPath)/TestListEditor.vsmdi"&lt;/metadatafile&gt;&amp;gt;&lt;br /&gt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;&amp;nbsp; &lt;/metadatafile&gt;&amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;TestList&lt;/metadatafile&gt;&amp;gt;&lt;testlist&gt;NameOfTestListToRun&lt;/testlist&gt;&amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;/TestList&lt;/metadatafile&gt;&amp;gt;&lt;br /&gt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;&lt;/metadatafile&gt;&amp;nbsp; &amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;TestRunConfig&lt;/metadatafile&gt;&amp;gt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;$(FolderPath)/LocalTestRun.testrunconfig&lt;/metadatafile&gt;&amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;/TestRunConfig&lt;/metadatafile&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;metadatafile include="$(BuildProjectFolderPath)/YourUnitTestListEditor.vsmdi"&gt;/MetaDataFile&lt;/metadatafile&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;After you run your build you should see that there are now UnitTest Results and Code Coverage Results in your Build Summary.&lt;br /&gt;&lt;br /&gt;Unfortunately this wasn't the case in my project. I got a partially succeeded build, the building itself&amp;nbsp; succeeded and all my unittest passed, but still I got a partially succeeded build. I noticed that the buildlog contained a lot of the following warnings: "&lt;i&gt;Warning VSP2013: Instrumenting this image requires it to run as a  32-bit process.  The CLR header flags have been updated to reflect this.&lt;/i&gt;" After some google searches I found &lt;a href="http://connect.microsoft.com/VisualStudio/feedback/details/428678/cannot-eliminate-warning-vsp2013-when-code-coverage-is-enabled-in-teambuild-builds" target="_blank"&gt;this&lt;/a&gt;.&lt;br /&gt;The article basically says that the buildserver makes 64 bit dll's and it can't place the instrumentation code for Code Coverage in these dll's because the Code Coverage runs as a 32 bit proces. Microsoft doesn't plan to fix this in the current release, but keep an eye out for new versions. After some more searching I found some other fixes for this problem, you can change the BuildConfiguration to always build Debug|x86 or you can do some Registry hacks on the buildserver. I didn't like any of these solutions so I started to look for different options.&lt;br /&gt;&lt;br /&gt;The best option I could find was the following:&lt;br /&gt;In the LocalTestRun.testrunconfig under Code Coverage there's an option to "Instrument assemblies in place" if you unselect this option the Code Coverage instrumention will be placed in a copy of the dll and not in the same dll. Unselect this option and restart the build.&lt;br /&gt;You will now see that the build will complete succesfully!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-8665316915006897636?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/8665316915006897636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2010/07/unittests-and-code-coverage-in-tfs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8665316915006897636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8665316915006897636'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2010/07/unittests-and-code-coverage-in-tfs.html' title='UnitTests and Code Coverage in TFS Build 2008'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-2459752412312023290</id><published>2010-04-06T22:33:00.001+02:00</published><updated>2010-04-06T22:33:08.462+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 3 MVVM Project Part I (updated Architecture)</title><content type='html'>&lt;p&gt;I know things in IT change fast, but I didn’t know things could change this fast. As soon as I posted my previous &lt;a href="http://mheijman.blogspot.com/2010/03/silverlight-3-mvvm-project-part-i.html" target="_blank"&gt;blog&lt;/a&gt; on the Silverlight 3 MVVM Architecture, it was already outdated. So here is the update.&lt;/p&gt;  &lt;p&gt;We decided that because we use bindings to get a reference to the commands, the commands are actually a part of the viewmodel. So the updated architecture looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_MbpWO_DhgII/S7uagULr4OI/AAAAAAAAAFs/R07rxJb3_sI/s1600-h/mvvmmodel%5B13%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="mvvmmodel" border="0" alt="mvvmmodel" src="http://lh3.ggpht.com/_MbpWO_DhgII/S7uagpjN4RI/AAAAAAAAAFw/eqP62ca8TFg/mvvmmodel_thumb%5B7%5D.png?imgmax=800" width="451" height="473" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;A View implements an interface, this is a change on the previous model. For a composite application I don’t want to implement a hard dependency on a specific kind of view. &lt;/p&gt;  &lt;p&gt;For example: Let’s say I have a module that allows me to search for a person (SearchPersonModule) and I have another module that allows me to search for cars (SearchCarModule). If I want to use these modules on PersonView and CarView, I would have to specify which module I want to load (hard dependency). This means I’m using my modules as UserControls. This can be a good idea, but it defies the purpose. I’m trying to take it a step further. The SearchPersonModule and SearchCarModule both implement the same interface (Let’s call that ISearchModule). In the PersonView and CarView I now only have to specify that I want a module that implements ISearchModule and leave it up to the Application or IoC container to give me an instantiated version of the right module. (I’ll describe how this is done in the next part of this blog)&lt;/p&gt;  &lt;p&gt;A View only has one ViewModel, everything a View needs to know is in that ViewModel (or the ViewEntities). A View can contain other Views and those Views will have their own ViewModel. The ViewModel also creates the Commands for the View, I explained how we use Commands my &lt;a href="http://mheijman.blogspot.com/2010/03/silverlight-3-mvvm-project-part-i.html" target="_blank"&gt;previous post&lt;/a&gt;. The ViewModel is also responsible for any view-specific functions like calculating a total sum or counting the number of persons in a search result.&lt;/p&gt;  &lt;p&gt;A ViewModel can have zero or more ViewEntities, ViewEntities are like Data Transfer Objects, they just carry the data that needs to be presented in the View.&lt;/p&gt;  &lt;p&gt;The Model is the place where we define the information need for the module. Let’s say I need a country list, the module will request an instance of the ICountryRepository and ask for the Country list. I don’t care what is giving me the the Country list, I just want it. The implementation of the CountryRepository is not my concern. I just know that ICountryRepository has a function List&amp;lt;CountryDataContract&amp;gt; GetAllCountries(). In the model I will map the CountryDataContract to my CountryViewEntity and expose that CountryViewEntityList as a property on the model.&lt;/p&gt;  &lt;p&gt;The IService stands for all the service interfaces I have within my application or framework (with service interface I do not mean a web service interface). For the EventManager I have an IEventManager interface and for the PersonRepository I have an IPersonRepository interface.&lt;/p&gt;  &lt;p&gt;All the communication to and from the module will be facilitated by the Services. All the communication within the module will be done by the commands.&lt;/p&gt;  &lt;p&gt;The next part of this blog will describe the implementation of this architecture.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-2459752412312023290?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/2459752412312023290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2010/04/silverlight-3-mvvm-project-part-i.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2459752412312023290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2459752412312023290'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2010/04/silverlight-3-mvvm-project-part-i.html' title='Silverlight 3 MVVM Project Part I (updated Architecture)'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_MbpWO_DhgII/S7uagpjN4RI/AAAAAAAAAFw/eqP62ca8TFg/s72-c/mvvmmodel_thumb%5B7%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-1452360294104731396</id><published>2010-03-31T19:17:00.001+02:00</published><updated>2010-03-31T19:17:52.008+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MEF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Reactive Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 3 MVVM Project Part I (Architecture)</title><content type='html'>&lt;p&gt;The last two weeks I got the opportunity to make a proof of concept for a Silverlight 3 application. The best part was: there’s only one requirement! It had to use the MVVM pattern! If you’re not familiar with the MVVM pattern, then check out &lt;a href="http://en.wikipedia.org/wiki/Model_View_ViewModel" target="_blank"&gt;this wikipedia article&lt;/a&gt;, there you’ll find a brief explanation and some more in-depth references.&lt;/p&gt;  &lt;p&gt;First I want to start with a “thank you” note to &lt;a href="http://bloggingabout.net/blogs/marc/" target="_blank"&gt;Marc Jacobi&lt;/a&gt; for the architectural guidance :). He was always there to keep that workload coming! (or change the color of that square :D)&lt;/p&gt;  &lt;p&gt;Marc and I (mostly Marc) started on the architecture of this Proof of Concept. The end result looked something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_MbpWO_DhgII/S7ODopNecVI/AAAAAAAAAFk/IwFtgAz4QVw/s1600-h/SL.MVVMArchitecture5.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="SL.MVVMArchitecture" border="0" alt="SL.MVVMArchitecture" src="http://lh5.ggpht.com/_MbpWO_DhgII/S7ODpLUlO3I/AAAAAAAAAFo/qK1XHHI4kZ0/SL.MVVMArchitecture_thumb3.jpg?imgmax=800" width="426" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Like any MVVM application there are still the basic Model-View-ViewModel classes. I won’t explain them here. The module should be a stand alone module. All the data needed (this includes incoming / outgoing information, incoming / outgoing events) should come from a service. The module (Model, CommandActions, etc) will only request interfaces of services, this is where an IoC container is needed.&lt;/p&gt;  &lt;p&gt;We extended the ViewModel and Model with the ViewEntity, it’s only purpose is to make the ViewModel a little bit more manageable. &lt;/p&gt;  &lt;p&gt;Within the module we only use commands. Silverlight usually uses events like button click, but we’re going to bypass that. The Command is just the wiring for the view and the appropriate method to execute. The Command shouldn’t know anything about the actual execution of methods, only that it needs to execute something. An addition to the Command is the possibility to know if it is actually allowed to execute some method. I’ll dig into this in part II of this blog.&lt;/p&gt;  &lt;p&gt;The CommandAction is responsible for the actual actions that need to take place when a Command is executed. The CommandAction is also responsible for registering itself to the specific Command. I’ll dig into this in part II of this blog.&lt;/p&gt;  &lt;p&gt;To make a real composite application, we need a way to let the independent modules communicate with each other. The EventManager will make this happen. Modules can request the interface to the EventManager, the EventManager will allow the module to register itself on specific Events or to Notify other Modules of a specific Event. It’s a basic publish subscribe pattern.&lt;/p&gt;  &lt;p&gt;That’s a wrap for the architectural point of view for the MVVM pattern in Silverlight. In the next part, I will dive into the implementation of this.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-1452360294104731396?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/1452360294104731396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2010/03/silverlight-3-mvvm-project-part-i.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1452360294104731396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1452360294104731396'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2010/03/silverlight-3-mvvm-project-part-i.html' title='Silverlight 3 MVVM Project Part I (Architecture)'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_MbpWO_DhgII/S7ODpLUlO3I/AAAAAAAAAFo/qK1XHHI4kZ0/s72-c/SL.MVVMArchitecture_thumb3.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-8999166444196239118</id><published>2009-11-24T13:26:00.001+01:00</published><updated>2009-11-24T13:29:26.273+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='BCS'/><title type='text'>SharePoint 2010: Business Connectivity Service Part I</title><content type='html'>&lt;p&gt;At this point there is still a lot of confusion surrounding the name of the new Business Data Catalog. In SharePoint 2007 it was Business Data Catalog in 2010 it’s Business Data Catalog or Business Connectivity Services or External Content Types. In Visual Studio 2010 it’s still Business Data Catalog and in SharePoint Designer 2010 it’s called External Content Types, but what’s in a name? I’ll call them Business Connectivity Services.&lt;/p&gt;  &lt;p&gt;In SharePoint 2007, the BDC lacked any form of UI, but in 2010 that has changed! You can find the Business Connectivity Services under: Central Administration –&amp;gt; Manage Service Applications –&amp;gt; Business Data Catalog. My preferred weapon of choice is Visual Studio, but if you want to do the basics then you can use SharePoint Designer (it’s a lot friendlier). When you’re trying to integrate with a very basic WCF service or SQL database or even a .dll (!!) &lt;strong&gt;SharePoint Designer&lt;/strong&gt; is the way to go. For all your other services (or custom work) use Visual Studio.&lt;/p&gt;  &lt;p&gt;For this first part I would like to do a basic thing. Staying close to the old BDC way. The BDC works with a Finder and a Specific Finder method. The Finder method returns a list of arbitrary items and the Specific Finder returns an item based on the ID of that item. I also want to do some custom work, so I won’t be creating my own webservice that has those two (Finder, Specific Finder) methods, that would be too easy.&lt;/p&gt;  &lt;p&gt;I found a webservice at: &lt;a title="http://www.webservicex.net/country.asmx" href="http://www.webservicex.net/country.asmx"&gt;http://www.webservicex.net/country.asmx&lt;/a&gt; that returns a string, but the string is an XML DataSet representation of a list of countries. If you try to set this thing up with the old BDC you’ll only get one object with a string in it. In the new BCS you now have the ability to customize the Finder and Specific Finder methods.&lt;/p&gt;  &lt;p&gt;First you have to install the &lt;strong&gt;Microsoft Visual Studio 2010&lt;/strong&gt; &lt;strong&gt;tools for SharePoint 2010&lt;/strong&gt;. Start Visual Studio 2010 and create a new Business Data Catalog model from the SharePoint 2010 projects.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_MbpWO_DhgII/SwvQ1TTwa1I/AAAAAAAAAEE/UdqYPX9BHsQ/s1600-h/VSTS%20BDC%5B7%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="VSTS BDC" border="0" alt="VSTS BDC" src="http://lh4.ggpht.com/_MbpWO_DhgII/SwvQ2NoY3XI/AAAAAAAAAEI/qmmK3xS0o1c/VSTS%20BDC_thumb%5B5%5D.png?imgmax=800" width="644" height="447" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Business Data Catalog Model starts with a basic model with Entity1 and an Entity1Service. If you run this project and create an external list in SharePoint, you’ll see your first BDC application running in SharePoint.&lt;/p&gt;  &lt;p&gt;Visual Studio now has a great new designer for the BDC Model and it’s a good one. Another good thing is, is that everything is XML. You can edit the DataCatalog files in the XML editor, I don’t recommend it, but you can. Stay in the &lt;strong&gt;BDC Explorer&lt;/strong&gt; for now, it has everything we need to do. Go to the &lt;strong&gt;Solution Explorer&lt;/strong&gt; and we’ll start by renaming the Entity1 to Country and remove all of the properties of it. Add three new properties to Country: IsoCode, Name and Currency. Add a Web Service Reference to the project for &lt;a title="http://www.webservicex.net/country.asmx" href="http://www.webservicex.net/country.asmx"&gt;http://www.webservicex.net/country.asmx&lt;/a&gt;. Go back to the &lt;strong&gt;BDC Explorer&lt;/strong&gt; and open BusinessDataCatalog1. You will see that there is still an Entity1 in there, rename it to Country. Rename Identifier1 to IsoCode and rename the methods to FindAllCountries and FindCountryByIsoCode (Finder and Specific Finder). I found a bug in this release; whenever you rename a method in the &lt;strong&gt;BDC designer&lt;/strong&gt; it automatically creates a new method in your service. I hope they’ll fix this in the Beta1.&lt;/p&gt;  &lt;p&gt;In the &lt;strong&gt;BDC Method Details&lt;/strong&gt; you’ll see all the details of all the methods. You’ll find that there will still be references to Entity1 or Identifier1. You can change these to Country and IsoCode respectively. One thing you should realize is that you’re now creating a model on top of the Country and CountryService classes. Make sure that all the names and objects in your model have underlying C# properties and classes. If you select the FindCountriesByIsoCode method in the &lt;strong&gt;BDC Explorer&lt;/strong&gt;, you can open the combobox for Country (or Entity1 if you forgot to rename it) next to returnParameter and click on Edit. You’ll jump to the &lt;strong&gt;BDC Explorer&lt;/strong&gt; and see the Model version of Country. Make sure that all the properties of Country are in the Model version, with the right name and type name. You can add “Properties” by right clicking on Country and select “Add type descriptor”. &lt;/p&gt;  &lt;p&gt;When you’re done, your &lt;strong&gt;BDC Model&lt;/strong&gt; should look something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_MbpWO_DhgII/SwvQ2mfqjNI/AAAAAAAAAEM/Fq1Jkf6ilaU/s1600-h/BDC%20details%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="BDC details" border="0" alt="BDC details" src="http://lh4.ggpht.com/_MbpWO_DhgII/SwvQ3Rbf7qI/AAAAAAAAAEQ/gnlcUm1TOBc/BDC%20details_thumb%5B2%5D.png?imgmax=800" width="644" height="467" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you’ve done all of this correctly you can go to the CountryService.cs (in the &lt;strong&gt;Solution Explorer&lt;/strong&gt;) and start coding on the FindAllCountries and FindCountryByIsoCode methods. When you’re all done do not forget to copy your serviceModel settings (app.config) to the SharePoint web.config file. (The automatic deployment in Visual Studio works great, but it forgets configuration settings). If you’ve done all of this correctly, then simply press F5 and navigate to your external content list and you’ll see this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_MbpWO_DhgII/SwvQ3wcr73I/AAAAAAAAAEU/RinFR1vqCZ4/s1600-h/countrylist%20in%20sharepoint%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="countrylist in sharepoint" border="0" alt="countrylist in sharepoint" src="http://lh5.ggpht.com/_MbpWO_DhgII/SwvQ4Zi0XOI/AAAAAAAAAEY/1SCo-18EaBs/countrylist%20in%20sharepoint_thumb%5B1%5D.png?imgmax=800" width="644" height="408" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-8999166444196239118?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/8999166444196239118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2009/11/sharepoint-2010-business-connectivity.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8999166444196239118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/8999166444196239118'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2009/11/sharepoint-2010-business-connectivity.html' title='SharePoint 2010: Business Connectivity Service Part I'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_MbpWO_DhgII/SwvQ2NoY3XI/AAAAAAAAAEI/qmmK3xS0o1c/s72-c/VSTS%20BDC_thumb%5B5%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-1134661493628519976</id><published>2009-02-18T14:52:00.001+01:00</published><updated>2009-02-18T14:58:23.430+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WorkFlow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Workflow 3.5 Designer Rehosting</title><content type='html'>&lt;p&gt;Since the release of Workflow, Designer Rehosting has been promoted as one of the good qualities of Workflow. In each article or presentation Designer Rehosting keeps coming back as a good thing. So I decided to put it to the test. I started with trying to find a reason why a customer would want to use Designer Rehosting. Microsoft gave me the following reasons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;(Design Time) To view, create or modify Workflows &lt;/li&gt;    &lt;li&gt;(Runtime) To view the current state of an executing workflow by utilizing the tracking information. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Both reasons are obvious and still don't give me any reason to sell it to a customer, they can use Visual Studio to do exactly the same. There's another reason why your customer might want to use Designer Rehosting. Maybe in some sort of specific scenario he wants to customize views to his needs or choices. With Designer Rehosting you can choose to expose as much or as little functionality of Workflow as you wish.&lt;/p&gt;  &lt;p&gt;I started with catching up on Designer Rehosting, MSDN has some great articles on that, you can find them &lt;a href="http://msdn.microsoft.com/en-us/library/aa480213.aspx" target="_blank"&gt;here&lt;/a&gt;. Microsoft made some sample bits to get you up to speed, those can be found &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3A331D20-44D4-4FB4-A833-F6EC9AEE1B82&amp;amp;displaylang=en" target="_blank"&gt;here&lt;/a&gt;. After I read the documentation (that's a lie) and grinding the code, I tried to do it myself. I must admit, I expected it to be easier. The actual hosting WF in a Winforms app is easy, but to put something of a framework together that was hard. Maybe I should have just copied all the code from the sample bits, but I hate to do that.&lt;/p&gt;  &lt;p&gt;All the things you need to get your view in order can be found in System.ComponentModel.Design. I used the WorflowView, DesignSurface and the WorkflowDesignerLoader to get my View in order. After a little bit of yelling and screaming at my PC, the view looked like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_MbpWO_DhgII/SZwSrtBLxRI/AAAAAAAAADk/zl33C01iDHY/s1600-h/winapp%5B6%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="342" alt="winapp" src="http://lh4.ggpht.com/_MbpWO_DhgII/SZwSsHrbioI/AAAAAAAAADo/XJyQjFH-Lyc/winapp_thumb%5B4%5D.jpg?imgmax=800" width="394" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The thing that got me screaming was the toolbox control, I expected that this toolbox would be in System.ComponentModel.Design, it was not. I did not find a control that showed me all the Activities from System.Workflow.Activities, so I ended up making the thing by myself. I don't know why Microsoft chose to not expose that control, but it sure would have helped me. Then again I'm now able to (for example) let the InvokeWebServiceActivity disappear from my toolbox, or show one of my own custom Activities.&lt;/p&gt;  &lt;p&gt;So now I'm able to drag and drop my Activities to my Workflow, that's cool! This is the basics on Designer Rehosting. I can load a Workflow and show it in my app. I didn't have time to get the Tracking ready, that will be my next project and just for fun I want to be able to add some code, but that's a whole different ballgame.&lt;/p&gt;  &lt;p&gt;To be honest I think that you should really think about if you want to use Designer Rehosting. It sounds easy and they make it look like you really want to, but you need to write a lot of plumbing code before you even have a simple app like this. I don't think there will be a lot of customers that really need Designer Rehosting, there are usually other (better and simpler) solutions for the same problem.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-1134661493628519976?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/1134661493628519976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2009/02/workflow-35-designer-rehosting.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1134661493628519976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1134661493628519976'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2009/02/workflow-35-designer-rehosting.html' title='Workflow 3.5 Designer Rehosting'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_MbpWO_DhgII/SZwSsHrbioI/AAAAAAAAADo/XJyQjFH-Lyc/s72-c/winapp_thumb%5B4%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-25233896071266932</id><published>2008-10-30T01:40:00.002+01:00</published><updated>2008-11-12T10:53:01.955+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>VS2010 and Architecture</title><content type='html'>&lt;p&gt;I had a little time left and started playing around with Visual Studio 2010 and I noticed some cool features. There's a new project type called the Modeling Project. I was a bit sceptical about this, because the modeling in VS2005 and VS2008 was not the experience I expected...&lt;/p&gt;&lt;p&gt;In VS2010 it is now possible to create Use Case diagram, Activity diagram, Component diagram, Sequence diagram and Layer diagram. Even versioning is possible with your favorite source control product. (TFS). Now I must have been asleep for a while or busy doing other things, but Microsoft has joined OMG, so the new UML diagrams are al UML 2.4! Now this I hadn't expected.&lt;/p&gt;&lt;p&gt;It's also possible to create Sequence diagrams from existing code, which is a big help if you're a new architect on a existing project. Talking about acrhitectional discovery VS2010 adds a new Architecture Explorer which creates Sequence diagrams, project dependency graphs and all sorts of handy diagrams, which can help you understanding the system.&lt;/p&gt;&lt;p&gt;From my point of view the Architecture Explorer is the best! It's a cool new tool in VS2010, which helps me get a better understanding of the system I'm working with. I can't wait to use it in real projects.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-25233896071266932?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/25233896071266932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/vs2010-and-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/25233896071266932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/25233896071266932'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/vs2010-and-architecture.html' title='VS2010 and Architecture'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-7353372175285696013</id><published>2008-10-30T00:05:00.001+01:00</published><updated>2008-10-30T00:06:08.835+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='Service Bus'/><title type='text'>.NET Services and The Service Bus</title><content type='html'>&lt;p&gt;The Service Bus is a new messaging infrastructure part of the new Windows Azure Services. It addresses a few Connectivity challenges we all are aware of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;IPv4 Address Shortage     &lt;ul&gt;       &lt;li&gt;Dynamic IP address allocation&lt;/li&gt;        &lt;li&gt;Network address translation&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;Firewalls layered over firewalls over firewalls&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So how does the service bus address these problems? There are a couple of components the service bus consist of:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;- Naming: &lt;/strong&gt;Because of the practical constraints of DNS (High update propagation latency, DNS names hosts and not instances etc.) the service bus naming system works in a different way i'm not going to dive into it now, but a few features are: R/W access with Access Control through the Service Bus Registry, Updates are reflected instantaneously and it names endpoints, not machines.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;- Service Registry: &lt;/strong&gt;The service registry is registry for service endpoints, not a general purpose directory. The registry is layered over the naming system and the services should publish themselves in the registry. The registry also provides the family of bindings for the service bus. Right now the service bus can be used with the following bindings:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;BasicHttpBinding&lt;/li&gt;    &lt;li&gt;WebHttp&lt;/li&gt;    &lt;li&gt;WSHttp&lt;/li&gt;    &lt;li&gt;WS2007Http&lt;/li&gt;    &lt;li&gt;WSHttpContext&lt;/li&gt;    &lt;li&gt;WS2007Httpfederationg&lt;/li&gt;    &lt;li&gt;NetTcp&lt;/li&gt;    &lt;li&gt;NetTcpContextBinding&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So how does the service bus works with these bindings? If you use NetOnewayRelaybinding then the Receiver creates an outbound connect bidirectional socket and register in the cloud (Registry of the Service Bus) (TCP/SSL 828 outbound open required) The sender outbound connect one-way net.tcp (tcp/ssl 808/828) to the Service Bus. The sender sends a message the Service Bus creates a route to the receiver.&lt;/p&gt;  &lt;p&gt;The NetEventRelayBinding allows muliple receivers, so you can send a message and both/more receivers will receive the message.&lt;/p&gt;  &lt;p&gt;NetTcpRelayBinding / Relayed is the one you should almost always use, because it got the highest throughput. A connection starts just like NetOneWay, but instead of connecting to the Service Bus we connect to the load-balanced front-end nodes. These nodes are some sort of Socket-Socket Forwarders the nodes sends a control message to the cloud and the cloud sends a control message to the receiver. The receiver then connects to the socket-socket forwarder and then the receiver and sender are connected through the socket-socket-forwarder.&lt;/p&gt;  &lt;p&gt;The last part I haven't discussed is security, this is where the Relay Access Control Model comes in.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;- Relay Access Control Model:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;RECEIVER MODEL: The receiver goes to the acces control service (azure) and acquire access token and asked for a claim for listen permissions on the service bus relay. Then this access token with subscription is passed to the service bus relay. The service bus relay will evaluate that token.&lt;/p&gt;  &lt;p&gt;SENDER MODEL: The same way: get a token send it to the relay, relay evaluate, and now the relay will pass the normal message to the receiver.&lt;/p&gt;  &lt;p&gt;There's even a possibility for you if you don't want to use the Access Control Service just add the following line in your BindingConfig &amp;lt;security relayClientAuthenticationType=&amp;quot;None&amp;quot;/&amp;gt;. I don't think it's a good idea, but you can.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-7353372175285696013?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/7353372175285696013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/net-services-and-service-bus.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/7353372175285696013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/7353372175285696013'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/net-services-and-service-bus.html' title='.NET Services and The Service Bus'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-3549278972684294425</id><published>2008-10-29T02:07:00.002+01:00</published><updated>2008-10-30T00:07:22.850+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><title type='text'>"Huron" Sync enabled cloud data hub</title><content type='html'>&lt;p&gt;To my surprise the Microsoft Sync Framework team has teamed up with the SQL Services Lab to produce "Huron".&lt;/p&gt;&lt;p&gt;"Huron" is a combination of SQL Data Services and Sync Framework. Which actually means that an arbritary database can be published to the SQL Data Services (which is a part of the Windows Azure Services) and after that Sync Framework kicks in.&lt;/p&gt;&lt;p&gt;For example: You have some sort of SQL Database which contains information that you want to share with your colleagues (on mobile devices for example). It's fairly easy to publish this database to the "cloud" (SQL Data Services). The Data Service will store your database as a blob in the cloud. After you've uploaded your database, sync framework does a first sync of the data in the database. Another user can  subscribe to your database, this means that a template of the database is downloaded to their local drive and sync framework does a first sync of al the data. This user also get a range of primairy keys he can use for adding rows. Which means that a user can add a row and the primairy key of that row will not be the id of the last row + 1, but will be the first number in the primairy key range. This little trick is done to reduce the sync logic. (Two users adding a row which gets the same id, sync framework can't determine which row is should be persisted in the real database).&lt;/p&gt;&lt;p&gt;Everyone who have been working with Sync Framework won't see anything new here accept the fact that the database is now out in the "cloud" and not in the company. So actually nothing new here, just a hype to sell Live Services. I understand that for smaller companies which don't have the money to provide the cost of administration, deployment and availability this could be a good solution. For bigger companies who already have the network and the maintenance departments (and the budget) for supporting these kinds of technologies, this can be an option if you want your data up in the "cloud", but I think there are better options.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-3549278972684294425?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/3549278972684294425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/sync-enabled-cloud-data-hub.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/3549278972684294425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/3549278972684294425'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/sync-enabled-cloud-data-hub.html' title='&amp;quot;Huron&amp;quot; Sync enabled cloud data hub'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-5936069240167065780</id><published>2008-10-29T00:04:00.001+01:00</published><updated>2008-10-29T01:22:17.901+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Oslo'/><title type='text'>First contact with Oslo</title><content type='html'>&lt;p&gt;The first presentation about the language Oslo was by Don Box and David Langworty. It was really good to see that I don't have to know T-SQL anymore!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why &amp;quot;M&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;We want creating and interacting with oslo content to be simple and natural     &lt;ul&gt;       &lt;li&gt;Having a box-and-line design experience is an important enabler&lt;/li&gt;        &lt;li&gt;Having a complementary textual experience is equally important&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;M is how we achieve the latter&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What is &amp;quot;M&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;M&amp;quot; is a language for defining domain models and textual domain-specific languages (DSLs)&lt;/li&gt;    &lt;li&gt;M domain models define schema and query over structured data     &lt;ul&gt;       &lt;li&gt;Values, constraints, and views&lt;/li&gt;        &lt;li&gt;Natural projection to SQL&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;M DSLS define projections from Unicode text to structured data     &lt;ul&gt;       &lt;li&gt;Rule-based transformation&lt;/li&gt;        &lt;li&gt;Grammar driven text editor integration&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;What &amp;quot;M&amp;quot; is not&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;An object-oriented language     &lt;ul&gt;       &lt;li&gt;No polymorphism, virtual dispatch&lt;/li&gt;        &lt;li&gt;&amp;quot;ls-a&amp;quot; determined based on structural subtyping, not stipulation&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;A data access technology     &lt;ul&gt;       &lt;li&gt;M domain models compile down to T-SQL&lt;/li&gt;        &lt;li&gt;Tool chain supports course-grained loading/unloading of schemas and values - not an OLTP solution&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;A replacement for T-SQL&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Far less expansive feature set&lt;/li&gt;      &lt;li&gt;Tool chain supports linking/invoking T-SQ&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;So Oslo is an abstraction on T-SQL and although it is not finished yet, it is already fun to play with. A little example:&lt;/p&gt;  &lt;p&gt;First to start with a normal table:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Module&lt;/strong&gt; Contacts&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;People&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;{&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt; { Name=&amp;quot;persona&amp;quot;, Age=29 },&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt; { Name=&amp;quot;personb&amp;quot;, Age=28 }&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;}&lt;/p&gt;    &lt;p&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This actually means that we defined a schema and filled the table with two rows.&lt;/p&gt;  &lt;p&gt;Next up constraints:   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Module &lt;/strong&gt;Contacts&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;-- Constraints:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;People :&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;{&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Name : Text where value.Count &amp;lt;= 30;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Age : Integer32;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;}*;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;People&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;{&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;{ Name=&amp;quot;persona&amp;quot;, Age=29 },&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;{ Name=&amp;quot;personb&amp;quot;, Age=28 }&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;}&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;What you see here is a constraint on the People table, which in T-SQL would look like this:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Create table&lt;/strong&gt; [Contacts].[People]&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;[Age] int not null,&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;[Name] nvarchar(28) not null&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;It's still another language to learn, but I like this more then T-SQL.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-5936069240167065780?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/5936069240167065780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/first-contact-with-oslo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/5936069240167065780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/5936069240167065780'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/first-contact-with-oslo.html' title='First contact with Oslo'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-1359977218584682173</id><published>2008-10-28T18:14:00.001+01:00</published><updated>2008-10-28T18:14:36.825+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>WPF on Windows 7</title><content type='html'>&lt;p&gt;Scrott Guthrie just presented some new features in WPF on Windows 7. They added some more interesting controls like a jumplist. A jumplist add some contextual support for your app. So when you right-click on your app in the taskbar, it shows the jumplist with it's available actions. They also improved the theme support and Deep Zoom will be in the WPF 4.0!&lt;/p&gt;  &lt;p&gt;They enabled multitouch, which you can use to make Surface-like applications (if you got the hardware!)&lt;/p&gt;  &lt;p&gt;Just to prove they believe in WPF (How could they not) they even built Visual Studio 2010 on WPF! This means that it's going to be really easy to extend Visual Studio specially on the visualisation part.&lt;/p&gt;  &lt;p&gt;Today there will be a new WPF toolkit out, with a new datagrid (finally), datepicker, calender, ribbon and a preview of the Visual State Manger available in WPF in .NET 4.0. The Visual State Manager introduces two concepts: State transitions and visual states. A control, such as a datepicker, has multiple visual states that define how the datepicker should look like when the mouse is hovering over it, or when it is pressed etc. Transitions are used to define how visuals dynamically change as the control moves from one state into another.&lt;/p&gt;  &lt;p&gt;The new WPF Toolkit will be available &lt;a href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-1359977218584682173?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/1359977218584682173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/wpf-on-windows-7.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1359977218584682173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/1359977218584682173'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/wpf-on-windows-7.html' title='WPF on Windows 7'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-6110923200218268434</id><published>2008-10-28T01:54:00.004+01:00</published><updated>2008-10-28T02:08:36.780+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='WorkFlow Foundation'/><title type='text'>WF 4.0 vs WF 3.0</title><content type='html'>A fast blog for now: the best improvements for WF 4.0!&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Activity:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Authoring is simpler and takes much less code&lt;/li&gt;&lt;li&gt;Fully declarative workflows and activities&lt;/li&gt;&lt;li&gt;Alignment across Expressions, Rules, and Activities&lt;/li&gt;&lt;li&gt;Seamless Composition Across Flow Styles&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;10-100x Performance Improvements&lt;/li&gt;&lt;li&gt;Full control over persistence&lt;/li&gt;&lt;li&gt;Flow-in Transactions&lt;/li&gt;&lt;li&gt;Partial Trust Support&lt;/li&gt;&lt;li&gt;Integrates with WCF, WPF, ASP.NET&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Designer Performance and usablility &lt;/li&gt;&lt;li&gt;Rehosting Improvements&lt;/li&gt;&lt;li&gt;Unified Debugging Experience&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I've seen the new Designer and it rocks! It looks better and even has a new zoomfunction which works much better then the old! But they added more they added external Arguments you can assign which goes in and out. And my personal favourite it even shows which variables are in scope! And it's possible to use expressions on those variables.&lt;/p&gt;&lt;p&gt;WF 4.0 is a part of "Dublin" for a complete overview on "Dublin" check it out &lt;a href="http://www.microsoft.com/NET/Dublin.aspx"&gt;here&lt;/a&gt;!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-6110923200218268434?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/6110923200218268434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/wf-40-vs-wf-30.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/6110923200218268434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/6110923200218268434'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/wf-40-vs-wf-30.html' title='WF 4.0 vs WF 3.0'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-2387141537469684029</id><published>2008-10-28T01:25:00.001+01:00</published><updated>2008-10-28T01:27:39.961+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2010 CTP</title><content type='html'>Visual Studio 2010 and .NET Framework 4.0 CTP is &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=922b4655-93d0-4476-bda4-94cf5f8d4814&amp;amp;displaylang=en&amp;amp;tm"&gt;out&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-2387141537469684029?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/2387141537469684029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/visual-studio-2010-ctp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2387141537469684029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2387141537469684029'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/visual-studio-2010-ctp.html' title='Visual Studio 2010 CTP'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-717882552438183288</id><published>2008-10-28T00:13:00.004+01:00</published><updated>2008-10-28T00:27:52.764+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><title type='text'>Available Windows Azure Services</title><content type='html'>Today there was another session on Windows Azure. It was sort of a walkthrough through all the available services on the azure platform, in my last post I gave a general idea on the available services (SharePoint, CRM, Live, .NET and SQL services). Now I can give a little bit more info on the Azure Services.&lt;br /&gt;There are six available service on the Azure Platform&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Access Control Service (identity management)&lt;/li&gt;&lt;li&gt;Mesh Service&lt;/li&gt;&lt;li&gt;Service Bus (application integration, with messaging events)&lt;/li&gt;&lt;li&gt;Workflow Service&lt;/li&gt;&lt;li&gt;LiveID Service&lt;/li&gt;&lt;li&gt;SQL Data Service&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I found the Acces Control Service, Mesh Service and the Workflow Service the most interesting.&lt;/p&gt;&lt;p&gt;The Access Control Service can be used to delegate your identity management to the cloud. What you can do is to allow users to be identified by their LiveID or by using your own Active Directory, which can save you a lot of work.&lt;/p&gt;&lt;p&gt;The Mesh Service can be used to get more information about the user who has been identified. For example: If a user wants to register for an event, he has to fill in where he lives, his date of birth and all sorts of private info. The mesh service allows you to request this data so a user doesn't have to fill it in. (Of course you should have permission of the user to do this).&lt;/p&gt;&lt;p&gt;The last one, the Workflow service is my personal favourite, you can create a workflow as you usually would do and the publish that workflow to the workflow service! After you published it, it is running in the cloud and can by example process the registration.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-717882552438183288?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/717882552438183288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/available-windows-azure-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/717882552438183288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/717882552438183288'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/available-windows-azure-services.html' title='Available Windows Azure Services'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-492022026166643269</id><published>2008-10-27T19:46:00.009+01:00</published><updated>2008-10-27T20:14:14.964+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><title type='text'>Windows Azure is coming!</title><content type='html'>Today we got a little surprise @PDC2008: Windows Azure was announced!&lt;br /&gt;I immediately changed sessions so I could attend to Manuvir Das' presentation: "A lap around windows Azure" for more information check out: &lt;a href="http://www.microsoft.com/azure/default.aspx"&gt;Windows Azure&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;So what is Windows Azure?&lt;/strong&gt;&lt;br /&gt;Windows Azure is an internet-scale cloud services platform hosted in Microsoft data centers, which provides an operating system and a set of developer services that can be used individually or together. Azure’s flexible and interoperable platform can be used to build new applications to run from the cloud or enhance existing applications with cloud-based capabilities. According to Microsoft.&lt;br /&gt;&lt;br /&gt;I will be attending more sessions about Windows Azure, so more technical information will follow. For what I've seen today it's going to be big, we've seen some demo's about live services of Sharepoint, CRM and SQL all available for us to develop on.&lt;br /&gt;&lt;br /&gt;Live Services is a set of building blocks within the Azure Services Platform for handling user data and application resources. Live Services provides developers with an easy way to build applications, across a range of digital devices that can connect with them.&lt;br /&gt;&lt;br /&gt;The Azure platform consists of five major services: Live Services, .NET Services, SQL Services, SharePoint Services and Dynamic CRM Services.&lt;br /&gt;&lt;br /&gt;We got access to the preview of Windows Azure, but the commercial release will be in 2009.&lt;br /&gt;A couple of notes about the business model of Windows Azure:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Consumption based billing&lt;/li&gt;&lt;li&gt;Strict SLAs with financial guarantees&lt;/li&gt;&lt;li&gt;Global reach&lt;/li&gt;&lt;li&gt;Presence in multiple datacenters&lt;/li&gt;&lt;li&gt;Geo-distribution&lt;/li&gt;&lt;li&gt;Service hosting options&lt;/li&gt;&lt;/ul&gt;Bit of a side note: I attended this session with my colleague &lt;a href="http://www.conducido.nl/"&gt;Wouter Crooy&lt;/a&gt;. Who immediately started blogging about it, and showed me he was first with his blog. Gratz to you :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-492022026166643269?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/492022026166643269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/windows-azure-is-coming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/492022026166643269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/492022026166643269'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/windows-azure-is-coming.html' title='Windows Azure is coming!'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-2060114139877063509</id><published>2008-10-13T10:05:00.003+02:00</published><updated>2008-10-13T10:17:24.716+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC 2008'/><title type='text'>PDC 2008 Achievements</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;In two weeks I will be attending the &lt;/span&gt;&lt;a href="http://www.microsoftpdc.com/"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;PDC 2008&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; in LA. This will be my first time, so I have great expectations and can't wait to go.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Today I read that they will be handing out different badges, "each attendee will start out with the official PDC 2008 badge and will be given new badges as a result of an accomplishment or in some cases being at the right place at the right time", according to &lt;/span&gt;&lt;a href="http://adamkinney.com/blog/366/default.aspx"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Adam Kinney&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;. As a true Xbox 360 fan, I love the achievements and these badges are just the same only in real life!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;So if you see me running around, raving like a madman, there's nothing wrong with me (Well nothing more then usual), I'm just collecting my achievements :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-2060114139877063509?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/2060114139877063509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/pdc-2008-achievements.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2060114139877063509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2060114139877063509'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/pdc-2008-achievements.html' title='PDC 2008 Achievements'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-2958337294926473568</id><published>2008-10-06T10:37:00.003+02:00</published><updated>2008-10-06T10:46:12.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WorkFlow Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Pageflow'/><title type='text'>Pageflow available on CodePlex</title><content type='html'>After a three week vacation in France and Italy, I'm catching up on the latest facts and the first good news I read was that my colleague &lt;a href="http://conducido.nl/blog/2008/10/01/pageflow-now-available-on-codeplex/"&gt;Wouter Crooy&lt;/a&gt; finally managed to get &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=PageflowWF"&gt;Pageflow&lt;/a&gt; on CodePlex!&lt;br /&gt;&lt;br /&gt;We've been working with Pageflow for over a year now and he's been trying to get it on CodePlex for about half a year, so congratulations!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-2958337294926473568?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/2958337294926473568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/10/pageflow-available-on-codeplex.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2958337294926473568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/2958337294926473568'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/10/pageflow-available-on-codeplex.html' title='Pageflow available on CodePlex'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-142434770575333756</id><published>2008-09-11T10:52:00.007+02:00</published><updated>2008-09-11T11:16:14.164+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>ResourceLocator for Silverlight</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;Last year I've done a large project with WPF and so I couldn't wait to start with Silverlight. I know there's a lot of stuff "missing" so once in a while I'll be posting some stuff that I know could come in handy.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;First thing I started with is a decent Resource Locator. Usually you would create your animations in the App.xaml and reference them in your UserControl. There are no triggers in Silverlight, in WPF triggers are able to connect to the target object for an animation. In Silverlight you should use the events to do this, they won't do this automatically so you have to do this yourself in code-behind.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;So I've created a helper class that can find Resources for you (like in WPF):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;public static class ResourceLocator&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt; &lt;summary&gt;&lt;br /&gt;/// Helper method for finding resources located in app.xaml &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;/// &lt;/summary&gt;&lt;br /&gt;public static object FindResource(string name)&lt;br /&gt;{&lt;br /&gt;if (App.Current.Resources.Contains(name))&lt;br /&gt;{&lt;br /&gt;return App.Current.Resources[name];&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;FrameworkElement root = App.Current.RootVisual as FrameworkElement;&lt;br /&gt;return root.FindName(name);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-142434770575333756?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/142434770575333756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/09/resourcelocator-for-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/142434770575333756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/142434770575333756'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/09/resourcelocator-for-silverlight.html' title='ResourceLocator for Silverlight'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-5636558995758418952</id><published>2008-09-10T15:01:00.005+02:00</published><updated>2008-09-10T15:06:16.746+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Presentations'/><title type='text'>Presentation CodeCamp 2008</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;Together with my colleague: &lt;/span&gt;&lt;a href="http://www.conducido.nl/blog"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Wouter Crooy&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;, we gave a session about Using Pageflow / Workflow Foundation for navigation in applications. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;(September 6th 2008, @ Microsoft innovation centre, Barneveld.)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;For people who are interested in the demo bits and presentation click &lt;/span&gt;&lt;a href="http://conducido.nl/blog/presentations/"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;More info about &lt;/span&gt;&lt;a href="http://www.codecamp.nl/" target="_blank"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;CodeCamp&lt;/span&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-5636558995758418952?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/5636558995758418952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/09/presentation-codecamp-2008.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/5636558995758418952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/5636558995758418952'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/09/presentation-codecamp-2008.html' title='Presentation CodeCamp 2008'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3344020922522885132.post-137071530054308605</id><published>2008-09-10T13:55:00.005+02:00</published><updated>2008-09-10T14:35:34.256+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>[AOP] Aspect-Oriented Programming part 1</title><content type='html'>&lt;span style="font-family:verdana;font-size:85%;"&gt;I've always been interested in AOP (Aspect Oriented Programming). I've spent a lot of time trying to figure out &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bb410104.aspx"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Policy Injection Application Block&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; in &lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Enterprise Library 3&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; and &lt;/span&gt;&lt;a href="http://www.springframework.net/"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Spring Framework&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;. Both frameworks made AOP a lot more accessible than it was before. Offcourse PIAB has its downsize, not being compatible with ObjectBuilder so AOP and DI with entlib is a no-go.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;The only thing the .NET framework missed was a compile time weaver. PIAB and Spring are runtime weavers, which basically means your code knows it's using AOP. For example a logging advice:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Basic .NET:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;public class MyClass&lt;br /&gt;{&lt;br /&gt;    public void DoSomething()&lt;br /&gt;    {&lt;br /&gt;        MessageLogging.Write(“Starting method DoSomething”);&lt;br /&gt;        // Run code&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;        MessageLogging.Write(“End method DoSomething”);&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;class Program&lt;br /&gt;{&lt;br /&gt;    static void Main(string[] args)&lt;br /&gt;    {&lt;br /&gt;        MyClass mine = new MyClass();&lt;br /&gt;        mine.DoSomething();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;When you're using Spring it should look something like this:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;public class MyClass&lt;br /&gt;{&lt;br /&gt;    public void DoSomething()&lt;br /&gt;    {&lt;br /&gt;        // run code&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;br /&gt;// spring advice:&lt;br /&gt;public class LoggingAdvice : IMethodInterceptor&lt;br /&gt;{&lt;br /&gt;    public object invoke(IMethodInvocation invocation)&lt;br /&gt;    {&lt;br /&gt;        MessageLogging.Write(“Starting method DoSomething”);&lt;br /&gt;        Object returnvalue = invocation.Proceed();&lt;br /&gt;        MessageLogging.Write(“End method DoSomething”);&lt;br /&gt;        return returnValue;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Program&lt;br /&gt;{&lt;br /&gt;    static void Main(string[] args)&lt;br /&gt;    {&lt;br /&gt;        ProxyFactory factory = new ProxyFactory(new MyClass());&lt;br /&gt;        Factory.AddAdvice(new LoggingAdvice());&lt;br /&gt;        ((MyClass)factory.GetProxy()).DoSomething();&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;The crosscutting concern (logging) is seperated from the method. The method DoSomehting isn't aware of the logging code. But the code using the method is well aware of the use of AOP (creating a proxyfactory). One advantage is that as a developer you will see the use of AOP. (But the code isn't getting any better, in my opinion).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postsharp.org/"&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;PostSharp&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt; is a compile time weaver, which means that postsharp will rewrite the MSIL, PostSharp is a post-compiler. PostSharp will inject itself in the build process and transforms or analyzes the program after its compiled. PostSharp is integrated in the MSBuild Proces and already has some plugins available:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;-          PostSharp Laos (for easily writing aspects)&lt;br /&gt;-          Software Transactional Memory (for using In-memory datastructures)&lt;br /&gt;-          Entity Framework Bindings&lt;br /&gt;-          PostSharp4Entlib (extend PIAB with PostSharp)&lt;br /&gt;-          PostSharp4Spring (integrate PostSharp with the Spring Framework)&lt;br /&gt;-          Log4PostSharp (Custom attribute for Log4Net)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;Because PostSharp is a compile time weaver, I don't have to use a proxyfactory. I just have to create an aspect and put it above my method:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;public class MyClass&lt;br /&gt;{&lt;br /&gt;    [LoggingAspect ]&lt;br /&gt;    public void DoSomething()&lt;br /&gt;    {&lt;br /&gt;        // run code&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;class Program&lt;br /&gt;{&lt;br /&gt;    static void Main(string[] args)&lt;br /&gt;    {&lt;br /&gt;        MyClass mine = new MyClass();&lt;br /&gt;        mine.DoSomething();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;[Serializable]&lt;br /&gt;public class LoggingAspect : OnMethodInvocationAspect&lt;br /&gt;{&lt;br /&gt;    public override void OnInvocation(MethodInvocationEventArgs eventArgs)&lt;br /&gt;    {&lt;br /&gt;        MessageLogging.Write("Method: " + eventArgs.Delegate.Method + " is called");&lt;br /&gt;        eventArgs.Delegate.DynamicInvoke(eventArgs.GetArguments());&lt;br /&gt;        MessageLogging.Write("Method call ended");&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:85%;"&gt;My calling code and method looks clean and mean, just the way I like it :).&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3344020922522885132-137071530054308605?l=mheijman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mheijman.blogspot.com/feeds/137071530054308605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mheijman.blogspot.com/2008/09/aop-aspect-oriented-programming-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/137071530054308605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3344020922522885132/posts/default/137071530054308605'/><link rel='alternate' type='text/html' href='http://mheijman.blogspot.com/2008/09/aop-aspect-oriented-programming-part-1.html' title='[AOP] Aspect-Oriented Programming part 1'/><author><name>Michel Heijman</name><uri>http://www.blogger.com/profile/04499290796415788717</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/_MbpWO_DhgII/SPLyztRpXRI/AAAAAAAAAA4/o-yh8PNHHHc/S220/michel.jpg'/></author><thr:total>0</thr:total></entry></feed>
