<?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-38895959</id><updated>2012-01-16T22:18:52.840Z</updated><category term='Personal'/><category term='Unit testing'/><category term='Visual Studio'/><category term='Mocking'/><category term='Windows 8'/><category term='SQL'/><category term='Unmanaged'/><category term='Selenium'/><category term='BizTalk'/><category term='UI Testing'/><category term='WCF Data Services'/><category term='Security'/><category term='GDI'/><category term='SOA'/><category term='Distributed Source Control Systems'/><category term='Source Control Systems'/><category term='Codeplex'/><category term='Visual Studio 2010'/><category term='Team Build 2010'/><category term='ReSharper 6.0'/><category term='ALM'/><category term='Windows Server 2008 R2'/><category term='Git'/><category term='VM Role'/><category term='CQRS'/><category term='LINQ to Objects'/><category term='Links'/><category term='Coding Challenge'/><category term='SQL Server Desktop'/><category term='Windows Azure'/><category term='LINQ to SQL'/><category term='Windows 8 pre-beta'/><category term='Events'/><category term='BizTalk ESB Toolkit 2.1'/><category term='LWAUG'/><category term='Zune HD'/><category term='TFS 11'/><category term='Visual Studio .NET 2008'/><category term='Windows 7'/><category term='CSP'/><category term='LINQ'/><category term='Windows Vista'/><category term='Broadband'/><category term='Patterns and practices'/><category term='IoC'/><category term='ADDS'/><category term='User group'/><category term='TFS'/><category term='SQL Server CE'/><category term='MVP'/><category term='Silverlight for Mobile'/><category term='XML'/><category term='.NET Framework'/><category term='BizTalk 2010'/><category term='MSBuild'/><category term='Mobile and Embedded'/><category term='ASP.NET MVC 3'/><category term='C# 3.0'/><category term='Orcas'/><category term='ReSharper'/><category term='iPhone'/><category term='WCF'/><category term='TFS 2010'/><category term='Windows Phone 7 Series'/><category term='Microsoft CRM'/><category term='Fail over cluster'/><category term='VS2010'/><category term='Getting Started With WM'/><category term='Tools'/><category term='Netbooks'/><category term='Compact Framework'/><category term='XBOX 360'/><category term='WPF'/><category term='DHCP'/><category term='Speaking'/><category term='Silverlight'/><category term='Books'/><title type='text'>Simon Hart</title><subtitle type='html'>Everything mobile (and anything in-between) in the modern enterprise</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.simonrhart.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default?start-index=101&amp;max-results=100'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>276</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-38895959.post-4360499238549985485</id><published>2012-01-11T23:28:00.003Z</published><updated>2012-01-13T17:09:14.073Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>My Microsoft Windows Azure 2012 wish-list</title><content type='html'>&lt;b&gt;UPDATE:&lt;/b&gt; Also I'd like to see a version of the Service Bus that's compiled against the .NET Framework v3.5 as not all consumers are able to move to .NET 4 right now.&lt;br /&gt;&lt;br /&gt;I have come up with my Microsoft Windows Azure wish-list for 2012 below (hope the Azure product group read this :)&lt;br /&gt;&lt;div class="MsoPlainText"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Auto scale compute instances (I know third-party tools exist)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Allow for scheduled suspended instances that do not eat compute time andalso allow for auto scaling out/in schedules without having to delete servicesfrom Azure&amp;nbsp;&lt;/li&gt;&lt;li&gt;Load balancing (F5) for compute instances not round robin&amp;nbsp;&lt;/li&gt;&lt;li&gt;Ability to configure topic/subscriptions rules via the Azure Management Portal&amp;nbsp;&lt;/li&gt;&lt;li&gt;Access Control Service support (or any type of federated security support) for SQL Azure for alternate additional security&lt;/li&gt;&lt;li&gt;Out of the box storageeditor for managing blobs, tables and queues (I know 3rd party tools exist and you can do this in Visual Studio)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Developer fabric for Service Bus and Service Bus queues and topics (this would be&amp;nbsp;awesome)&lt;/li&gt;&lt;li&gt;Portalsupport for VM roles i.e. uploading VHD's (I know command-line tools exist)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Out of the box support for viewing Service Bus queues and topics and verifying Service Bus endpoints without retrieving the ATOM service bus feed (I know opensource code exists)&amp;nbsp;&lt;/li&gt;&lt;li&gt;Access Control Service support for storage, tables, blobs, and queues&amp;nbsp;&lt;/li&gt;&lt;li&gt;Support for Hadoop/Big Data on Azure or any type of high performance computing perhaps ainstance that targets or VM role to support Windows Server HPC 2008&lt;/li&gt;&lt;li&gt;An easy DR strategy for all Azure services i.e. compute, storage etc.&lt;/li&gt;&lt;li&gt;Managed Service Management API&lt;/li&gt;&lt;li&gt;Give MSDN subscription holders 12 month usage&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There in no particular order, not asking much am I!&lt;/div&gt;&lt;br /&gt;&lt;div class="MsoPlainText"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4360499238549985485?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4360499238549985485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4360499238549985485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4360499238549985485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4360499238549985485'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2012/01/my-microsoft-windows-azure-2012-wish.html' title='My Microsoft Windows Azure 2012 wish-list'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5051906185400979975</id><published>2012-01-05T23:46:00.003Z</published><updated>2012-01-06T23:48:52.596Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VM Role'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>VM Role custom VHD instance in Azure Compute - avoid the gotchas!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-t_PYGr3JnWA/TweEui1W-_I/AAAAAAAAAl4/w7eVQwhlePM/s1600/windows-azure-logo-nimbo1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://4.bp.blogspot.com/-t_PYGr3JnWA/TweEui1W-_I/AAAAAAAAAl4/w7eVQwhlePM/s1600/windows-azure-logo-nimbo1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Background on the VM Role for Windows Azure&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Even though I have a ultimate MSDN account which means I have 1500 hrs of free compute time on Azure, I'm using the free 3 month trial anyone can get regardless of whether&amp;nbsp;you have an MSDN account or not.&lt;br /&gt;&lt;br /&gt;I got this account (let me correct that) I received this Azure account from a colleague due to sickness and haven't given it back! since then I have been exploring many of the new features within Azure using this account. The thing that has caught my attention, is&amp;nbsp;that, many people within the community is referring to&amp;nbsp;the VM Role&amp;nbsp;as IaaS or Microsoft's attempt at IaaS (which it is *not*).&lt;br /&gt;&lt;br /&gt;Steve Plank DPE in Microsoft Reading UK has a very good post on this subject here just to clear up any confusion: (Windows Azure VMRole != IaaS) &lt;a href="http://blogs.msdn.com/b/plankytronixx/archive/2010/10/29/windows-azure-vmrole-iaas.aspx"&gt;http://blogs.msdn.com/b/plankytronixx/archive/2010/10/29/windows-azure-vmrole-iaas.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Remember, once your custom VM Role instance is deployed and you are running code on that image, the PaaS model works in the exact same way as a out-of-the-box Azure OS image does when using either Web Role or a Worker Role compute instance. Meaning that on reboot the image could be rebuilt and deployed in another rack or sector&amp;nbsp;and any data you might have written to that particular instance will have been lost.&lt;br /&gt;&lt;br /&gt;VM&amp;nbsp;Role compliments the Worker and Web roles in Azure compute.&amp;nbsp;All these services&amp;nbsp;still fall under the standard PaaS compute model in Azure. It just so happens that you are in control of the actual image (OS image) that gets deployed to the instances you have specified. The image currently (as of Jan 2012)&amp;nbsp;has to be Windows Server 2008 R2 Standard or Windows Server 2008 R2 Enterprise edition. In terms of licencing the OS, this is covered as part of the compute costs when you actually deploy your application to run on the custom image.&lt;br /&gt;&lt;br /&gt;Today (Jan 2012) the VM Role feature is in beta and if you attempt to upload a custom VM VHD to Azure without being in the beta, it will fail - don't learn this the hard way like I did! instead simply request to be in the beta programme from the Azure Management Portal. You can do this by&amp;nbsp;logging onto the Azure portal management web site: &lt;a href="http://windows.azure.com/"&gt;http://windows.azure.com/&lt;/a&gt; then clicking &lt;strong&gt;Home&lt;/strong&gt;.&amp;nbsp;Then right at the top click&amp;nbsp;&lt;strong&gt;Beta Programmes&lt;/strong&gt;.&amp;nbsp;You should then see the VM Role feature, simply click the check box then click Apply or OK. Once you do this you will normally be accepted within 1 day or so.&lt;br /&gt;&lt;br /&gt;My Azure 3 month&amp;nbsp;trial account has now been disabled so I can't show screen shots until I sign up using my MSDN account which I haven't done&amp;nbsp;yet. Finding this beta programme&amp;nbsp;link isn't hard though.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Types of VM technologies&amp;nbsp;supported&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Notice I keep saying VM Role &lt;strong&gt;VHD&lt;/strong&gt; instance. Yes you are correct, Azure today only supports Hyper-V virtual images. I am unaware of any technology that will create these images other than a physical Windows Server machine running Hyper-V. I do happen to have a couple lying around so creating them wasn't an issue for me but I can see it being a problem for folks that do not have hardware lying around to use. I'm interested to hear any potential solutions around this. My desktop vitalisation technology of choice today is Oracle VirtualBox. VirtualBox can mount and run VHD's but I'm unaware of being able to actually create them using VirtualBox.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;Uploading a VM Role image to Windows Azure&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;This post talks you through the entire process of creating a VHD and deploying to Azure, it's very good: &lt;a href="http://msdn.microsoft.com/en-us/gg502178"&gt;http://msdn.microsoft.com/en-us/gg502178&lt;/a&gt;&amp;nbsp;This article also shows you how to target that custom image in Visual Studio.&lt;br /&gt;&lt;br /&gt;The syntax is slightly wrong for the upload of a VHD image though. It is actually quite strange with the odd quotes and hyphens etc. Just to be clear, today, there is no support for uploading a VHD using the portal, you need to use the Azure SDK tool &lt;strong&gt;csupload&lt;/strong&gt;. I am unaware of a RESTful API to do this, no doubt there is.&lt;br /&gt;&lt;br /&gt;An example of it's usage is as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: 126px; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 98.68%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; csupload Add-VMImage -Connection "SubscriptionId=xxxxxxxx-388a-4304-90c7-d239c3843624; &lt;br /&gt;CertificateThumbprint=xxxxxxxxxxxxxxxxxxxxA115BE5D35A45D4E18F7" &lt;br /&gt;-Description "Base image Windows Server 2008 R2" &lt;br /&gt;-LiteralPath "\\&lt;server&gt;\nodes\baseimage.vhd" &lt;br /&gt;-Name baseimage.vhd -Location "North Europe"&lt;br /&gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;You'll need to run that command from an administrative Azure command-prompt.&lt;br /&gt;&lt;br /&gt;Of course you need to use you're own Windows Azure Subscription ID and x.509 certificate thumbprint. Note, regarding certificates, even if you have the correct thumbprint, you will need the actual certificate installed in the certificate store from where you run this upload command.&lt;br /&gt;&lt;br /&gt;The tool is quite clever in that it compresses the VM image before upload. The web site link above covers this process in quite nice detail and where you go from here.&lt;br /&gt;&lt;br /&gt;Be patient though, this process takes a while to run - of course depending on your upload speed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;So why would I ever use&amp;nbsp;a VM Role?&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;This has been talked about so much already in the community but I though I'd add my view on the subject.&lt;br /&gt;&lt;br /&gt;There are many cases where you simply need custom code running within the standard image that would otherwise not be possible or installable as a start up custom task (the process of running custom installers when the instance is booted and comes out of sys-prep mode).&lt;br /&gt;&lt;br /&gt;One example is performance testing. It could be that you setup a core base image with a tool such as LoadUI for performing performance testing in the cloud saving the need to run this testing on on-premise hardware. This could also include configuration for performance counters.&lt;br /&gt;&lt;br /&gt;There are many other scenarios similar to the above. But remember, treat any data being written locally as transient data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5051906185400979975?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5051906185400979975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5051906185400979975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5051906185400979975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5051906185400979975'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2012/01/vm-role-custom-vhd-instance-in-azure.html' title='VM Role custom VHD instance in Azure Compute - avoid the gotchas!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-t_PYGr3JnWA/TweEui1W-_I/AAAAAAAAAl4/w7eVQwhlePM/s72-c/windows-azure-logo-nimbo1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6199690173123516616</id><published>2011-12-31T20:20:00.000Z</published><updated>2011-12-31T20:27:26.327Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Server 2008 R2'/><category scheme='http://www.blogger.com/atom/ns#' term='DHCP'/><category scheme='http://www.blogger.com/atom/ns#' term='ADDS'/><title type='text'>The trust relationship between this workstation and the primary domain failed</title><content type='html'>This evening I encountered an error while attempting to log onto my Windows 7 client machine: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;The trust relationship between this workstation and the primary domain failed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-icPvK10bSmc/Tv9spWVLU_I/AAAAAAAAAlY/0lV-GYF-6EM/s1600/Windows7domaintrustissue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://2.bp.blogspot.com/-icPvK10bSmc/Tv9spWVLU_I/AAAAAAAAAlY/0lV-GYF-6EM/s1600/Windows7domaintrustissue.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;I have a Windows Server&amp;nbsp;2008 R2 domain controller running DHCP, DNS and of course ADDS.&lt;br /&gt;&lt;br /&gt;I figured out the issue (although I would have never of suspected it) moments before the error,&amp;nbsp;I was reconfiguring the DNS IP address for a scope against my DHCP server.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Below is the DHCP scope editor for DHCP in Windows Server 2008 R2. This is a fairly old box which I haven't changed that much over 2 or so years and it is used by many devices/machines.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Searching the web didn't really give any firm solutions other than to rejoin to&amp;nbsp;the domain. so I tried that and it worked.&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MPxK7VFWpM4/Tv9tiKM9I5I/AAAAAAAAAlw/t-dXzCmWALg/s1600/domaintrustissue.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" rea="true" src="http://3.bp.blogspot.com/-MPxK7VFWpM4/Tv9tiKM9I5I/AAAAAAAAAlw/t-dXzCmWALg/s1600/domaintrustissue.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I think it would be a good idea to raise a bug report for this.&lt;br /&gt;&lt;br /&gt;Happy new year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6199690173123516616?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6199690173123516616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6199690173123516616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6199690173123516616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6199690173123516616'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/trust-relationship-between-this.html' title='The trust relationship between this workstation and the primary domain failed'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-icPvK10bSmc/Tv9spWVLU_I/AAAAAAAAAlY/0lV-GYF-6EM/s72-c/Windows7domaintrustissue.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2963834140779634739</id><published>2011-12-08T19:45:00.001Z</published><updated>2012-01-16T22:18:52.873Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='LWAUG'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>London Windows Azure User Group LWAUG - first meeting update</title><content type='html'>LWAUG - what a mouthful! As mentioned in an earlier post, I attended the LWAUG first meeting on Tuesday night in London. I thoroughly enjoyed it and learned a lot from it. I also found it particularly useful talking to various folks during breaks and after the talks - as I do with most user groups, engaging with members and exchanging experiences/knowledge is one of the reasons I attend.&lt;br /&gt;&lt;br /&gt;Sadly though, I could only stay for Richard Conway's talk on Service Management API's in Windows Azure. Service Management API's allow you to programmatically&amp;nbsp;create and deploy services into Azure. I missed Andy Cross's talk on diagnostics as I had to get back to Norfolk, I didn't get home until 00:30am. Andy's slides can be obtained here: &lt;a href="http://lwaugbe.blob.core.windows.net/talks/Fluent%20Diagnostics%20Dec%2011.pptx"&gt;http://lwaugbe.blob.core.windows.net/talks/Fluent%20Diagnostics%20Dec%2011.pptx&lt;/a&gt;.&amp;nbsp;(note the use of Azure blob storage to store the files!). &lt;br /&gt;&lt;br /&gt;I am told some&amp;nbsp;of the service management API's as demoed by Richard are undocumented. Everything talks via REST in Azure, sorry SOAP folks, nothing to see! REST is removing all the fluff you get with SOAP. SOAP just doesn't scale when you're trying to consume services over constrained low-bandwidth networks such as EDGE and GPRS. As we have a ever so increasing breadth of varied connected devices, i.e. net books, smart phones, laptops, PDAs, tablets etc this is a very big deal. So I'm glad the Microsoft Azure architects stuck with REST in Azure. Anyway, I think this is a big subject and one we could&amp;nbsp;discuss at a future LWAUG event(s).&lt;br /&gt;&lt;br /&gt;See here for documentation around Service Management REST API's in Azure: &lt;a href="http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx"&gt;http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx&lt;/a&gt;&amp;nbsp;it seems fairly extensive, those messages can easily be sent via Fiddler so you don't need to write anything to play around with the API.&lt;br /&gt;&lt;br /&gt;You can download Richards slides here: &lt;a href="http://lwaugbe.blob.core.windows.net/talks/Service%20Management%20Dec%2011.pptx"&gt;http://lwaugbe.blob.core.windows.net/talks/Service%20Management%20Dec%2011.pptx&lt;/a&gt;&amp;nbsp;(again from blob storage)&lt;br /&gt;&lt;br /&gt;Also Richard has uploaded his code used in his demo's here: &lt;a href="http://lwaugbe.blob.core.windows.net/talks/HostedServices.etc.zip"&gt;http://lwaugbe.blob.core.windows.net/talks/HostedServices.etc.zip&lt;/a&gt; definitely worth looking at if you want to auto-deploy your Windows Azure services into Azure Compute via mechanisms like continuous deployment for seamless integration for your testers and developers.&lt;br /&gt;&lt;br /&gt;I'm looking forward to the next meet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2963834140779634739?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2963834140779634739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2963834140779634739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2963834140779634739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2963834140779634739'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/london-windows-azure-user-group-lwaug.html' title='London Windows Azure User Group LWAUG - first meeting update'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6701295262729766276</id><published>2011-12-05T17:51:00.001Z</published><updated>2011-12-05T18:08:31.985Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>London Azure User Group first meeting - 6th December</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aE7vUVdk2I0/Tt0E7ALrjLI/AAAAAAAAAko/HtV6i2JxHio/s1600/lwaug.png" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" dda="true" src="http://3.bp.blogspot.com/-aE7vUVdk2I0/Tt0E7ALrjLI/AAAAAAAAAko/HtV6i2JxHio/s1600/lwaug.png" /&gt;&lt;/a&gt;&lt;/div&gt;Tomorrow night (6th December 2011) I'll be&amp;nbsp;attending the new &lt;a href="http://www.lwaug.net/"&gt;London Windows Azure User Group&lt;/a&gt; meeting near Liverpool Street.&lt;br /&gt;&lt;br /&gt;I learn't about it when I attended the recent &lt;a href="http://plankytronixx.com/azbootcamp.aspx"&gt;Windows Azure Bootcamp&lt;/a&gt; run by Steve Planky due to the fact that the person that was mean't to go couldn't due to sickness, so I went instead. &lt;br /&gt;&lt;br /&gt;I plan to do future presentations for this group and looking forward to it.&lt;br /&gt;&lt;br /&gt;There is another Azure user group called UK AzureNet that started in 2009. Lately it has been rather quiet so it's good to see some interest in Azure once again in the community.&lt;br /&gt;&lt;br /&gt;If you are quick there seems to be a couple places left, register here: &lt;a href="http://www.lwaug.net/"&gt;http://www.lwaug.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6701295262729766276?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6701295262729766276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6701295262729766276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6701295262729766276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6701295262729766276'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/london-azure-user-group-first-meeting.html' title='London Azure User Group first meeting - 6th December'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-aE7vUVdk2I0/Tt0E7ALrjLI/AAAAAAAAAko/HtV6i2JxHio/s72-c/lwaug.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2685926741291747704</id><published>2011-12-04T22:04:00.000Z</published><updated>2012-01-07T10:23:32.910Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Source Control Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Control Systems'/><title type='text'>Why I prefer BitBucket over GitHub</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xwS3MMf33SI/Ts1FcINy3mI/AAAAAAAAAis/NBQStjj8t7g/s1600/github.jpg" imageanchor="1" style="cssfloat: left; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" hda="true" height="88" src="http://3.bp.blogspot.com/-xwS3MMf33SI/Ts1FcINy3mI/AAAAAAAAAis/NBQStjj8t7g/s200/github.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sLv0338QhoI/Ts1Fl94yvwI/AAAAAAAAAi0/dZhhYO9GAVQ/s1600/bitbucket-now-with-git1.png" imageanchor="1" style="cssfloat: right; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" hda="true" height="120" src="http://4.bp.blogspot.com/-sLv0338QhoI/Ts1Fl94yvwI/AAAAAAAAAi0/dZhhYO9GAVQ/s320/bitbucket-now-with-git1.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;strong&gt;UPDATE 07/01/2012:&lt;/strong&gt; Thanks for Atlassian for the free BitBucket T-Shirt! :)&lt;br /&gt;&lt;br /&gt;I don't really care that GitHub has more repositories or has more traffic or more popular than X in this case BitBucket. All I really care about is features, and I think BitBucket has more of them than GitHub does.&lt;/div&gt;&lt;br /&gt;I wrote about how excited I was about BitBucket a few days ago on my other blog here: &lt;a href="http://smart421.wordpress.com/2011/11/17/why-i-like-bitbucket/"&gt;http://smart421.wordpress.com/2011/11/17/why-i-like-bitbucket/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I recently read this post: &lt;a href="http://www.pocoo.org/~blackbird/github-vs-bitbucket/bitbucket.html"&gt;http://www.pocoo.org/~blackbird/github-vs-bitbucket/bitbucket.html&lt;/a&gt;&amp;nbsp;which talks how GitHub is identical to BitBucket except according to Google, GitHub has a much larger community than BitBucket. I think that goes without saying. There is even support for GitHub in linkedin so you can link your repositories to your linkedin profile - I like that.&lt;br /&gt;However with GitHub you have to pay for things like; disk space and&amp;nbsp;private repositories. Well you do get 300Mb free with GitHub - with BitBucket there is no limit. I need to elaborate on this a bit more. GitHub says these limits are "Soft Limits" and this is to prevent abuse, abuse from what!? adding everything I have ever written to a repository perhaps!&lt;br /&gt;&lt;br /&gt;With GitHub the Web UI is just not very intuitive. For example, I was just trying to create a repository, and I'm still trying to figure out how to do it. This could be because I do not have a credit card on file. When clicking "Repositories" I'd expect some kind of link, button to create a new repo or something.&lt;br /&gt;&lt;br /&gt;With BitBucket this is so much finer, I find it a lot more intuitive and I don't have to enter a credit card unless I need to exceed the 5 free contributors&amp;nbsp;I got when I signed up.&lt;br /&gt;&lt;br /&gt;Another feature I really like with BitBucket (not sure if you can do this with GitHub) is import repositories from other source control systems such as Git, Mercurial or SVN. That's right, you can also create new repositories using Mercurial or Git.&lt;br /&gt;&lt;br /&gt;And finally, I like that fact&amp;nbsp;with BitBucket the ability to use a custom internet domain for all my repositories. For example I've set a CNAME record:&amp;nbsp;&lt;a href="http://code.simonrhart.com/"&gt;http://code.simonrhart.com/&lt;/a&gt; to resolve to bitbucket.org. And it just works, navigating to&amp;nbsp;my above sub domain, resolves my BitBucket account.&lt;br /&gt;&lt;br /&gt;So remind me again why I'd use GitHub over BitBucket?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2685926741291747704?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2685926741291747704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2685926741291747704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2685926741291747704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2685926741291747704'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/why-i-prefer-bitbucket-over-github.html' title='Why I prefer BitBucket over GitHub'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xwS3MMf33SI/Ts1FcINy3mI/AAAAAAAAAis/NBQStjj8t7g/s72-c/github.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3567412350376940090</id><published>2011-12-01T23:29:00.001Z</published><updated>2011-12-01T23:36:54.236Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>MSDN Subscribers - get you're free Azure account...</title><content type='html'>MSDN subscribers: &lt;a href="http://www.microsoft.com/windowsazure/msdn-benefits/"&gt;http://www.microsoft.com/windowsazure/msdn-benefits/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Non MSDN subscribers for the 90 day trial: &lt;a href="http://www.microsoft.com/windowsazure/free-trial/"&gt;http://www.microsoft.com/windowsazure/free-trial/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There used to be a link on the MSDN subscription page but it has seemed to have been moved so I wrote this blog post so I never lose it again and hopefully inform others.&lt;br /&gt;&lt;br /&gt;The benefits vary depending on your level of MSDN subscription. For example ultimate users get 1500 compute hours per month - I think that is pretty good. &lt;br /&gt;&lt;br /&gt;Nice!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3567412350376940090?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3567412350376940090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3567412350376940090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3567412350376940090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3567412350376940090'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/msdn-subscribers-get-youre-free-azure.html' title='MSDN Subscribers - get you&apos;re free Azure account...'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3670237606804740298</id><published>2011-12-01T23:02:00.000Z</published><updated>2011-12-01T23:27:25.796Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Windows Azure (compute) still accrues compute time whilst services are suspended</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;I wrote a post last year when I got billed for services that I had deployed to Windows Azure compute instances here: &lt;a href="http://www.simonrhart.com/2010/05/moving-windows-azure-ctp-account-over.html"&gt;http://www.simonrhart.com/2010/05/moving-windows-azure-ctp-account-over.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I got billed because when Azure went from CTP to RTM, they started charging customers, no surprise there! but because I forgot I had some demo services deployed in Windows Azure, I got charged. So I quickly deleted them.&lt;br /&gt;&lt;br /&gt;I started using Windows Azure compute again - historically I've only used Windows Azure AppFabric which in most cases doesn't use Windows Azure Compute - i.e. you don't normally host any custom services in Windows Azure, instead you use the service bus to relay messages back to your on-premise data centre.&lt;br /&gt;&lt;br /&gt;It's good to know now that Microsoft make this very clear in the new-ish management portal (written in Silverlight):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Mswl2yPWGrQ/TtgK1jtseqI/AAAAAAAAAkg/iyyQyIjg8QQ/s1600/AzuresuspendedServices.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" dda="true" src="http://3.bp.blogspot.com/-Mswl2yPWGrQ/TtgK1jtseqI/AAAAAAAAAkg/iyyQyIjg8QQ/s1600/AzuresuspendedServices.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;﻿﻿﻿﻿﻿﻿﻿﻿So now it is fairly explicit, so no excuses people, when you get billed for deployed&amp;nbsp;disabled services, don't complain! To stop billing from occurring, you need to delete the services using the management portal entirely, that is of course you don't intend to use those services.&lt;br /&gt;&lt;br /&gt;Heads up on the new portal, I like it, it's&amp;nbsp;a much improved user experience over the old multi-site portal for each SQL Azure, Windows Azure and Windows Azure AppFabric. Now management it done under one portal site.&lt;br /&gt;&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/38895959-3670237606804740298?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3670237606804740298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3670237606804740298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3670237606804740298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3670237606804740298'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/12/windows-azure-compute-still-accrues.html' title='Windows Azure (compute) still accrues compute time whilst services are suspended'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Mswl2yPWGrQ/TtgK1jtseqI/AAAAAAAAAkg/iyyQyIjg8QQ/s72-c/AzuresuspendedServices.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5523176820600045370</id><published>2011-11-29T20:25:00.000Z</published><updated>2011-11-29T20:38:51.310Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='UI Testing'/><title type='text'>OpenQA.Selenium.WebDriverException : Failed to start up socket within 45000</title><content type='html'>If you have tried using the &lt;a href="http://nuget.org/List/Packages/FluentAutomation.SeleniumWebDriver"&gt;FluentAutomation&lt;/a&gt; with Selenium recently or in fact the Selenium WebDriver API directly within an automated test using something like NUnit, you might have encountered the following exception when used with Firefox:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; OpenQA.Selenium.WebDriverException : Failed to start up socket within 45000&lt;br /&gt;  &lt;br /&gt; at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.ConnectToBrowser(Int64 timeToWaitInMilliSeconds)  &lt;br /&gt; at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Start()  &lt;br /&gt; at OpenQA.Selenium.Firefox.FirefoxDriver.StartClient()  &lt;br /&gt; at OpenQA.Selenium.Firefox.FirefoxDriver..ctor(FirefoxBinary binary, FirefoxProfile profile, TimeSpan commandTimeout)  &lt;br /&gt; at FluentAutomation.SeleniumWebDriver.AutomationProvider.Navigate(Uri pageUri)  &lt;br /&gt; at FluentAutomationDemo.Integration.TestClass1.Test() in Class1.cs: line 19   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rfzJ1n2dQo0/TtVBoH3bDjI/AAAAAAAAAjY/pTj686_Ycc8/s1600/seleniumfailure.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-rfzJ1n2dQo0/TtVBoH3bDjI/AAAAAAAAAjY/pTj686_Ycc8/s1600/seleniumfailure.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 1&lt;/b&gt;: Selenium test failure in Visual Studio&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The latest version of the FluentAutomation uses the Selenium.WebDriver v2.8. This FluentAutomation can be installed via NuGet using the Package Manager Console:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; PM&amp;gt; Install-Package FluentAutomation.SeleniumWebDriver  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Alternatively, you can get the code on GitHub here: &lt;a href="https://github.com/stirno/FluentAutomation"&gt;https://github.com/stirno/FluentAutomation&lt;/a&gt;The C# code I used to generate this error looks like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; using FluentAutomation.API.Enumerations;  &lt;br /&gt; using NUnit.Framework;  &lt;br /&gt; namespace FluentAutomationDemo.Integration  &lt;br /&gt; {  &lt;br /&gt;   public class TestClass1 : FluentAutomation.SeleniumWebDriver.FluentTest  &lt;br /&gt;   {  &lt;br /&gt;     [Test]  &lt;br /&gt;     public void Test()  &lt;br /&gt;     {  &lt;br /&gt;       I.Use(BrowserType.Firefox);  &lt;br /&gt;       I.Open("http://www.google.com");  &lt;br /&gt;       I.Enter("Fluent Automation API").In("#lst-ib");  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;So as you can see, it is simply trying to insert &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Fluent Automation API&lt;/span&gt; in the search box of a Google page using FireFox.It seems the Selenium WebDriver does not support the latest version of Firefox which is at the time of writing: 8.0.1. A workaround is to downgrade to Firefox v7.0.1.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To do this you then need to uninstall Firefox and download an old version from here (you can't get the old versions from the Firefox site): &lt;a href="http://www.oldapps.com/firefox.php"&gt;http://www.oldapps.com/firefox.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-DGtsqlYZsfQ/TtVA8z21PNI/AAAAAAAAAjQ/NKdmB5GLyiY/s1600/removefirefox.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-DGtsqlYZsfQ/TtVA8z21PNI/AAAAAAAAAjQ/NKdmB5GLyiY/s1600/removefirefox.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 2&lt;/b&gt;: Removing Firefox 8.0.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;By default the Firefox settings it set to auto update to the latest version available. You can turn this off thankfully.&lt;br /&gt;&lt;br /&gt;To turn off the auto-update feature, simply un-tick the Firefox check box as in Figure 3 below, then click OK.&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-BeTJnEDaUHY/TtUYAynojEI/AAAAAAAAAjI/ib_prwV3Qcw/s1600/FirefoxOptions.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-BeTJnEDaUHY/TtUYAynojEI/AAAAAAAAAjI/ib_prwV3Qcw/s1600/FirefoxOptions.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 3&lt;/b&gt;: Firefox advanced options&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Rerun the unit tests and all should be well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5523176820600045370?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5523176820600045370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5523176820600045370' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5523176820600045370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5523176820600045370'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/11/openqaseleniumwebdriverexception-failed.html' title='OpenQA.Selenium.WebDriverException : Failed to start up socket within 45000'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-rfzJ1n2dQo0/TtVBoH3bDjI/AAAAAAAAAjY/pTj686_Ycc8/s72-c/seleniumfailure.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-957502492360871519</id><published>2011-11-11T17:30:00.001Z</published><updated>2011-11-11T17:34:32.912Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 3'/><title type='text'>Code formatter for blogs</title><content type='html'>I &lt;a href="http://codeformatter.blogspot.com/2009/06/about-code-formatter.html"&gt;came across this site&lt;/a&gt; that allows for easy formatting of source code for displaying on blog posts. Pretty cool. This is a test post...&lt;pre  style="font-family:arial;font-size:12px;border:1px dashed #CCCCCC;width:99%;height:auto;overflow:auto;background:#f0f0f0;padding:0px;color:#000000;text-align:left;line-height:20px;"&gt;&lt;code style="color:#000000;word-wrap:normal;"&gt;   public class StructureMapFilterProvider : FilterAttributeFilterProvider  &lt;br /&gt;   {  &lt;br /&gt;     /// &amp;lt;summary&amp;gt;  &lt;br /&gt;     /// Structuremap instance.  &lt;br /&gt;     /// &amp;lt;/summary&amp;gt;  &lt;br /&gt;     private readonly IContainer container;  &lt;br /&gt;     /// &amp;lt;summary&amp;gt;  &lt;br /&gt;     /// Initializes a new instance of the &amp;lt;see cref="StructureMapFilterProvider"/&amp;gt; class.  &lt;br /&gt;     /// &amp;lt;/summary&amp;gt;  &lt;br /&gt;     /// &amp;lt;param name="container"&amp;gt;The container.&amp;lt;/param&amp;gt;  &lt;br /&gt;     public StructureMapFilterProvider(IContainer container)  &lt;br /&gt;     {  &lt;br /&gt;       this.container = container;  &lt;br /&gt;     }  &lt;br /&gt;     /// &amp;lt;summary&amp;gt;  &lt;br /&gt;     /// Intercept's GetFilters, then use the "BuildUp" feature of structuremap to avoid using decorators for property injection and this  &lt;br /&gt;     /// involves coupling.  &lt;br /&gt;     /// &amp;lt;/summary&amp;gt;  &lt;br /&gt;     /// &amp;lt;param name="controllerContext"&amp;gt;The controller context.&amp;lt;/param&amp;gt;  &lt;br /&gt;     /// &amp;lt;param name="actionDescriptor"&amp;gt;The action descriptor.&amp;lt;/param&amp;gt;  &lt;br /&gt;     /// &amp;lt;returns&amp;gt;A list of filters for the current context.&amp;lt;/returns&amp;gt;  &lt;br /&gt;     public override IEnumerable&amp;lt;Filter&amp;gt; GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)  &lt;br /&gt;     {  &lt;br /&gt;       var filters = base.GetFilters(controllerContext, actionDescriptor);  &lt;br /&gt;       if (filters != null)  &lt;br /&gt;       {  &lt;br /&gt;         foreach (var filter in filters)  &lt;br /&gt;         {  &lt;br /&gt;           this.container.BuildUp(filter.Instance);  &lt;br /&gt;         }  &lt;br /&gt;         return filters;  &lt;br /&gt;       }  &lt;br /&gt;       return default(IEnumerable&amp;lt;Filter&amp;gt;);  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Neat, I like it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-957502492360871519?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/957502492360871519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=957502492360871519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/957502492360871519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/957502492360871519'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/11/code-formatter-for-blogs.html' title='Code formatter for blogs'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total><georss:featurename>Norwich, Norfolk, UK</georss:featurename><georss:point>52.6281014 1.2993494</georss:point><georss:box>52.5509969 1.1414209000000002 52.705205899999996 1.4572779</georss:box></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-49399671379214145</id><published>2011-10-13T22:09:00.000Z</published><updated>2011-11-28T14:25:49.265Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 11'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Source Control Systems'/><title type='text'>TFS 11 - initial review</title><content type='html'>Over the past few days I have been able to &lt;a href="http://msdn.microsoft.com/en-us/vstudio/hh127353"&gt;download and try out some of the new features in TFS 11&lt;/a&gt;. Thankfully the product architectural wise hasn't changed, most of the changes are enhancements to an already well designed product.&lt;br /&gt;&lt;br /&gt;Here are some of my favourite enhancements to TFS 11.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;1. Active Directory user description support&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We now get actual full user descriptions as specified in Active Directory instead of actual AD user names as per pre TFS 11 for history tracking. So&amp;nbsp;viewing history on a single source code file now gives you&amp;nbsp;the following in figure 1. This is important as some companies use numeric user id's which makes it more difficult to know who did what.&lt;br /&gt;﻿ &lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ekJOjbKQL8Q/ToyMncszy4I/AAAAAAAAAgY/XwMaYJ62EMs/s1600/TFS11UserDescriptionHistory.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" kca="true" src="http://4.bp.blogspot.com/-ekJOjbKQL8Q/ToyMncszy4I/AAAAAAAAAgY/XwMaYJ62EMs/s1600/TFS11UserDescriptionHistory.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1: Active Directory full user descriptions in history tracking&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;2. Scrum process template now included out of the box&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;﻿&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;The&amp;nbsp;Scrum v2 process template installed by default with TFS 11. In TFS 2010 you had to download and install&amp;nbsp;the Microsoft Scrum v1 process template.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xWi-AV560k8/TpXE1VRpa1I/AAAAAAAAAgk/vyKLsARkHKo/s1600/TFS11Scrum2.0ProcessTemplate.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://3.bp.blogspot.com/-xWi-AV560k8/TpXE1VRpa1I/AAAAAAAAAgk/vyKLsARkHKo/s1600/TFS11Scrum2.0ProcessTemplate.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 2&lt;/strong&gt;: Scrum v2 preview process template included with TFS 11&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;3. DEV11: New Solution Explorer&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Solution Explorer has now been replaced with the popular Visual Studio Power Tool Solution Explorer. See figure 3. The enhanced solution explorer out of the box lists member names that allows you to simply select the member and Visual Studio will show the code editor. You can also search for types within the search box in the new solution Explorer. &lt;br /&gt;&lt;br /&gt;Personally I prefer ReSharper for this (CTRL + T) as it's much faster. &lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZrZ6zmrnK7I/TpXFv_QFGCI/AAAAAAAAAgs/HckBDtK-X-Y/s1600/DEV11NewSolutionExplorer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-ZrZ6zmrnK7I/TpXFv_QFGCI/AAAAAAAAAgs/HckBDtK-X-Y/s1600/DEV11NewSolutionExplorer.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 3&lt;/strong&gt;: DEV11 New Solution Explorer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;﻿﻿See figure&amp;nbsp;4 below&amp;nbsp;for searching for a type in the new Solution Explorer.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-LRM9op-sSKg/TpXGN5Qtt6I/AAAAAAAAAg0/lI-Wlj2pClY/s1600/DEV11SearchingForAFileinSolutionExplorer.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;strong&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-LRM9op-sSKg/TpXGN5Qtt6I/AAAAAAAAAg0/lI-Wlj2pClY/s1600/DEV11SearchingForAFileinSolutionExplorer.png" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 4&lt;/strong&gt;: DEV11 Searching for types using the new Solution Explorer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;﻿﻿ &lt;strong&gt;&lt;span style="font-size: large;"&gt;4. Support for DEV10&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I tested DEV 10 (VS 2010) with TFS 11 and it performed as per normal unlike VS 2008 - TFS 2010 in that you had to install a forward update patch.&amp;nbsp;Also using DEV&amp;nbsp;08 with TFS 2010 was not completely supported. For instance, there were some features&amp;nbsp;in Team build regarding&amp;nbsp;Build definitions you couldn't edit correctly. Some work item reports wouldn't work and you couldn't edit some work items in the IDE. It appears DEV 10 - TFS 11 is alot better in this area than DEV 08 - TFS 10 is.&lt;br /&gt;&lt;br /&gt;I haven't yet tested DEV 08 with TFS 11 and not sure if it is supported.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;5. Build definition enhancements&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can now set build definitions to either; Enabled, Disabled or Paused status. This is a really powerful feature as sometimes you just want to disable a build while you reconfigure the build servers or fix some issues with the failing build process. During these times, you don't want builds executing but at the same time you don't want to delete the build definition. Figure&amp;nbsp;5 shows the new UI in DEV 11.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aiTJaIUEQLI/TpXIbiRLoOI/AAAAAAAAAg8/HmwjW_Owsi4/s1600/TFS11EnablePauseDisableBuilds.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://3.bp.blogspot.com/-aiTJaIUEQLI/TpXIbiRLoOI/AAAAAAAAAg8/HmwjW_Owsi4/s1600/TFS11EnablePauseDisableBuilds.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 5&lt;/strong&gt;: Enable, pause or disable build definitions in DEV 11&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;6. Rollback feature&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A rollback feature is now part of TFS/DEV 11. This is a nice feature, rolling back code pre TFS 11/DEV 11 was a pain and most developers used the TFS Power Tools to achieve this easily. Now in TFS 11 that feature has made it into the main product. It is as easy as selecting the changeset and choosing "Rollback".&lt;br /&gt;&lt;br /&gt;Let's see this in action as I think this is worth showing... Now if I delete action &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; from the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; class in our MVC 4 application as shown in figure&amp;nbsp;6. We will have a pending change. Pending changes has been re-engineered in DEV 11, it can be seen in figure&amp;nbsp;7. More on this later. You can see the pending change is on the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; class we just changed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-R6uUZ8oa4sw/TpdKC4d5TRI/AAAAAAAAAhM/evTmzMjGSeg/s1600/TFS11PostDeleteAboutAction.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://4.bp.blogspot.com/-R6uUZ8oa4sw/TpdKC4d5TRI/AAAAAAAAAhM/evTmzMjGSeg/s1600/TFS11PostDeleteAboutAction.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 6&lt;/strong&gt;: About action on the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; has been removed&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GgZZFcbIjj0/TpdJmEp3bEI/AAAAAAAAAhE/CDXIFtnTLTw/s1600/TFS11HomeControllerPendingChanges.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-GgZZFcbIjj0/TpdJmEp3bEI/AAAAAAAAAhE/CDXIFtnTLTw/s1600/TFS11HomeControllerPendingChanges.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 7&lt;/strong&gt;: New pending changes view&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now lets check that change in. Once we do that, DEV 11 tells us the changeset id, as per figure&amp;nbsp;8. &lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-o57WPvrD7dg/TpdUc9wLm3I/AAAAAAAAAhU/kfEqnKSYFf4/s1600/TFS11HomeControllerCheckedIn.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://3.bp.blogspot.com/-o57WPvrD7dg/TpdUc9wLm3I/AAAAAAAAAhU/kfEqnKSYFf4/s1600/TFS11HomeControllerCheckedIn.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 8&lt;/strong&gt;: Successful check in&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Now if we look at the history of our MVC application, we get the familiar following: figure 9.&lt;br /&gt;﻿&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-7rsAp_vmDA8/TpdVTcFeIVI/AAAAAAAAAhc/xd7fxrtn-bA/s1600/TFS11RollbackChangesetHistory.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;strong&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-7rsAp_vmDA8/TpdVTcFeIVI/AAAAAAAAAhc/xd7fxrtn-bA/s1600/TFS11RollbackChangesetHistory.png" /&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 9&lt;/strong&gt;: Familiar application history, showing how we can rollback a changeset&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Notice we have a new context menu option &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;"Rollback Entire Changeset"&lt;/span&gt;. So we could rollback which ever changeset we wished, this is really easy. Lets choose to rollback the deletion of the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; action as this is now causing the testers to raise a defect. But first lets be sure that our checked in code did actually cause the app to break. Pressing F5 runs the app. Figure&amp;nbsp;10 shows it loads ok (new MVC 4 layout):&lt;/div&gt;﻿﻿﻿ &lt;br /&gt;﻿﻿ &lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-lgp1d4tMK8w/TpdWLiwlJyI/AAAAAAAAAhk/t7W7XKAwpfM/s1600/DEV11ASPNETMVC4AppOK.png" imageanchor="1" style="clear: left; cssfloat: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-lgp1d4tMK8w/TpdWLiwlJyI/AAAAAAAAAhk/t7W7XKAwpfM/s1600/DEV11ASPNETMVC4AppOK.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure&amp;nbsp;10&lt;/strong&gt; Successfully loaded our MVC 4 application&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;﻿﻿ &lt;br /&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;Now if I click &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; on the landing page, I get the following error:&lt;/span&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-QsfnQJAVjss/TpdW_mcmI6I/AAAAAAAAAhs/6pkUyjp_e0o/s1600/DEV11ASPNETMVC4AboutError.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://4.bp.blogspot.com/-QsfnQJAVjss/TpdW_mcmI6I/AAAAAAAAAhs/6pkUyjp_e0o/s1600/DEV11ASPNETMVC4AboutError.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 11&lt;/strong&gt;: Error when attempting to execute the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; action on the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;So I think we need to rollback that bug we introduced. So right clicking the changeset 10 and choosing &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;"Rollback this Entire Changeset"&lt;/span&gt;, be careful here are you do not get a prompt. As soon as I did this Visual Studio asked me if I wanted to reload &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController.cs&lt;/span&gt; as it has been modified outside of the source editor. So here, I selected Yes.&lt;/span&gt;&lt;/div&gt;If I open up the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; class in Visual Studio, I now notice that the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; action is back, nice.&amp;nbsp;I like this feature. Figure&amp;nbsp;12 shows this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-m0GeInNhrQs/TpdasLQFVhI/AAAAAAAAAh8/QLyaVx5949E/s1600/TFS11PreDeleteAboutAction.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-m0GeInNhrQs/TpdasLQFVhI/AAAAAAAAAh8/QLyaVx5949E/s1600/TFS11PreDeleteAboutAction.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 12&lt;/strong&gt;: About action is now back from a previous changeset&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;So how did this happen? I would expect some history against the application on the server, something like &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;"Rollback to changeset ..."&lt;/span&gt;. But looking at the history for the application shows the the latest changeset as 10 as per Figure&amp;nbsp;9 above. If you don't believe me, try it for yourself!&lt;br /&gt;&lt;br /&gt;Changeset 10 was the changeset where we deleted the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;About&lt;/span&gt; action from the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; class.&lt;br /&gt;&lt;br /&gt;So what is going on here?? If we look at our pending changes, we will see that &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;HomeController&lt;/span&gt; is in an &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Edit&lt;/span&gt;, and &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Rollback&lt;/span&gt; state, see figure 13 below. So the tool figures out which files are different from within the changeset that you have asked to roll back, then merges them with your local workspace. So now all I have to do is commit/check in.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-UNDZgK04WSM/TpdcXsfU1AI/AAAAAAAAAiE/QzM-4mIs9VI/s1600/TFS11RollbackHomeControllerPendingChanges.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-UNDZgK04WSM/TpdcXsfU1AI/AAAAAAAAAiE/QzM-4mIs9VI/s1600/TFS11RollbackHomeControllerPendingChanges.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 13&lt;/strong&gt;: State of our workspace&amp;nbsp;after a rollback&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Once I do this, TFS assigns that change set like any other, it increments by 1. So after that check in, TFS assigns it as change set number 11. See figure 14 below:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-zjs9pK_f76w/TpdcvtpkjeI/AAAAAAAAAiM/blKxJ9Cv_3M/s1600/TFS11HistoryPostRollback.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://2.bp.blogspot.com/-zjs9pK_f76w/TpdcvtpkjeI/AAAAAAAAAiM/blKxJ9Cv_3M/s1600/TFS11HistoryPostRollback.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 14&lt;/strong&gt;: History post rollback commit&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;I think this is a really powerful feature and this is as easy as it should be to rollback server side changes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: large;"&gt;7&amp;nbsp;Filter build definitions&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The community (including MVP’s) asked and the ALM product team delivered! With VS 11 you can now filter build definitions. This is a simple feature but will make our lives so much easier. See figure 15&amp;nbsp;for an example of this:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-JbBJG25FEMw/Tpdd5Ig91sI/AAAAAAAAAiU/uPoMqrKBJzk/s1600/TFS11FilteringBuildDefinitions.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-JbBJG25FEMw/Tpdd5Ig91sI/AAAAAAAAAiU/uPoMqrKBJzk/s1600/TFS11FilteringBuildDefinitions.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;strong&gt;Figure 15&lt;/strong&gt;: Filtering build definitions in DEV 11&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;In figure 15 above, I simply typed "release" and got all the release build definitions listed that matched "release".&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0cm 0cm 10pt;"&gt;There is also a concept of &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;“Favourite builds”&lt;/span&gt; and is stored per user which is neat.&lt;/div&gt;This concludes my initial review of TFS 11 - for now&amp;nbsp;anyway. There is a lot more to cover off, particually around the new work item tracking and using the enhanced web portal for managing work items much like TFS Workbench does but instead using a web browser.&lt;br /&gt;&lt;br /&gt;I recommend you download the CTP and try these features for yourself...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-49399671379214145?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/49399671379214145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=49399671379214145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/49399671379214145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/49399671379214145'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/10/tfs-11-initial-review.html' title='TFS 11 - initial review'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ekJOjbKQL8Q/ToyMncszy4I/AAAAAAAAAgY/XwMaYJ62EMs/s72-c/TFS11UserDescriptionHistory.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8869929798207409638</id><published>2011-09-29T20:41:00.000Z</published><updated>2011-09-29T20:42:31.364Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>BizTalk 101 - Publish subscribe MessageBox explanation diagram</title><content type='html'>The following diagram is useful for explaining how the MessageBox works in BizTalk server particularly when you are new to BizTalk. Remember that BizTalk uses the &lt;a href="http://en.wikipedia.org/wiki/Publish/subscribe"&gt;publish/subscribe messaging pattern&lt;/a&gt; for everything. Even for what appears to be synchronous message calls. Even Orchestrations subscribe to the MessageBox for the execution of those rules.&lt;br /&gt;&lt;br /&gt;Thanks to Dino Fassis for forwarding this onto me. Sorry I'm not aware who created this great diagram, but thanks to you for this great work. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-fL3GUKvq9jo/ToTSVUQqzkI/AAAAAAAAAgU/3dHk5wYO734/s1600/Biztalk101.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" kca="true" src="http://1.bp.blogspot.com/-fL3GUKvq9jo/ToTSVUQqzkI/AAAAAAAAAgU/3dHk5wYO734/s1600/Biztalk101.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8869929798207409638?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8869929798207409638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8869929798207409638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8869929798207409638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8869929798207409638'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/09/biztalk-101-publish-subscribe.html' title='BizTalk 101 - Publish subscribe MessageBox explanation diagram'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-fL3GUKvq9jo/ToTSVUQqzkI/AAAAAAAAAgU/3dHk5wYO734/s72-c/Biztalk101.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2370553539300063781</id><published>2011-09-24T19:36:00.000Z</published><updated>2011-11-28T14:24:46.717Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ReSharper'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC 3'/><category scheme='http://www.blogger.com/atom/ns#' term='ReSharper 6.0'/><title type='text'>ReSharper 6 now supports ASP.NET MVC 3</title><content type='html'>&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-mfPzUsLi13s/Tn2QwcsMc1I/AAAAAAAAAfw/hnIIERz5Rj8/s1600/resharper6.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/-mfPzUsLi13s/Tn2QwcsMc1I/AAAAAAAAAfw/hnIIERz5Rj8/s1600/resharper6.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-mfPzUsLi13s/Tn2QwcsMc1I/AAAAAAAAAfw/hnIIERz5Rj8/s1600/resharper6.jpg" /&gt;&lt;/a&gt; &lt;br /&gt;I'd like to say to a big thanks to the chaps over at &lt;a href="http://www.jetbrains.com/"&gt;JetBrains&lt;/a&gt; for once again giving me a free NFR (Not for resale) copy of ReSharper 6.&lt;br /&gt;&lt;br /&gt;If you have never heard of ReSharper or not quite sure what it is, I have written about this Visual Studio plugin multiple times in the past. &lt;a href="http://www.simonrhart.com/2008/06/resharper-40.html"&gt;here&lt;/a&gt;, &lt;a href="http://www.simonrhart.com/2010/09/stylecop-for-resharper.html"&gt;here&lt;/a&gt; and &lt;a href="http://www.simonrhart.com/2008/09/resharper-41-released.html"&gt;here&lt;/a&gt;.&lt;todo&gt; &lt;/todo&gt;&lt;br /&gt;&lt;br /&gt;There are quite a few new features in this latest release. Most of which are around support for ASP.NET MVC 3 and the new Razor view engine.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;This blog post assumes you know ASP.NET MVC 3 fairly well. If not check out Microsoft's ASP.NET MVC 3 tutorials. I'd start here: &lt;a href="http://www.asp.net/mvc/mvc3"&gt;http://www.asp.net/mvc/mvc3&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Razor view to controller navigation &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;So in the previous version of ReSharper which is v5.1, there was little support for the integration between Razor (views) and the Controllers. This was because ReSharper 5.1 was released before MVC 3 shipped. Also, by default, there is no validation provided by the MVC 3 developer tools. So if you happen to write a piece of HTML Razor markup like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@Html.ActionLink("Register", "Register2")&lt;/pre&gt;&lt;br /&gt;The above code will execute action method &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Register2&lt;/span&gt; on the Controller that the view was generated from. In this case the controller is the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Account&lt;/span&gt; controller as this is the default application I am testing ReSharper on that gets generated from the T4 VS template for an MVC application. The above code will compile and run. You won't actually know that the above markup is in error until you actually run the application and browse that actual page. There is no tool support in Visual Studio that will tell you that this will error.&lt;br /&gt;&lt;br /&gt;When running the application with the above markup, the following error is returned in Figure 1 below:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qgBJAOUTD4k/Tn30GC9KkzI/AAAAAAAAAf4/pI92wM1lV6U/s1600/CodinganIncorrectActioninReSharper5.1.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-qgBJAOUTD4k/Tn30GC9KkzI/AAAAAAAAAf4/pI92wM1lV6U/s1600/CodinganIncorrectActioninReSharper5.1.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 1&lt;/b&gt;: Error when attempting to execute an invalid action from a Razor view&lt;/td&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;In ReSharper 6 the above issue is prevented, not completely though. I'll show that in a minute.&lt;br /&gt;&lt;br /&gt;The next thing is within a Razor view, in order to understand the location or path of an action, you have to understand how the application has been implemented unless of course the name of the Controller has been specified within the call. In the above markup example, it hadn't, it's inferred at run time. So take the following markup again:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@Html.ActionLink("Register", "Register2")&lt;/pre&gt;&lt;br /&gt;The above markup requires you to know how the view was generated, from which controller. that piece of HTML is actually from the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;LogOn.cshtml&lt;/span&gt; partial. Wouldn't it be neat if you could just click the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;Register2&lt;/span&gt; action in order to navigate to it?&lt;br /&gt;&lt;br /&gt;Installing ReSharper 6 allows you to do just that which I'll show in just a few moments... &lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Controller to view navigation&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;With ReSharper 5.1 there was a little support for finding Views from Controller actions. For example take the following example from the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;AccountController&lt;/span&gt; in the MVC 3 sample application:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eS9qko_jVW0/Tn4DX1fjYqI/AAAAAAAAAf8/vyv_jlOJtt0/s1600/ReSharper51_FindViewViaController.png" imageanchor="1"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-eS9qko_jVW0/Tn4DX1fjYqI/AAAAAAAAAf8/vyv_jlOJtt0/s1600/ReSharper51_FindViewViaController.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 2&lt;/b&gt;: Searching for the view from a Controller using ReSharper 5.1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Here we can resolve the view and navigate to it, which is great, but I'd really like to know the path of the view in some cases.&lt;br /&gt;&lt;br /&gt;Now after ReSharper 6.0 is installed (compatible with VS 2010) lets look at some of the above issues we had before.&lt;br /&gt;&lt;br /&gt;One thing you will notice when upgrading to ReSharper 6.0 from either 5.0 or 5.1, is you need a new licence key. ReSharper 5.x licence keys do not work for ReSharper 6.0:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ntNB0CtGSCw/Tn4Ggsys2FI/AAAAAAAAAgA/N5SItW1Q1Y4/s1600/ReSharper5.0LicenceNotWorkWithReSharper6.0.png" imageanchor="1"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ntNB0CtGSCw/Tn4Ggsys2FI/AAAAAAAAAgA/N5SItW1Q1Y4/s1600/ReSharper5.0LicenceNotWorkWithReSharper6.0.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 3&lt;/b&gt;: ReSharper 6.0 requires a new licence key (I did blank out my 5.1 key, sorry!)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="color: #3d85c6; font-size: x-large;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #3d85c6; font-size: x-large;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Razor view to controller navigation (RS 6.0) &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;So now if we open up the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;LogOn.cshtml&lt;/span&gt; file as before and take a look at some of the Razor markup for Controller navigation, we get the following:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-PiqjOCfTbV8/Tn4MAHYv8FI/AAAAAAAAAgI/5SSc9PtZaU8/s1600/ReSharper60RazorNavigation.png" imageanchor="1"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-PiqjOCfTbV8/Tn4MAHYv8FI/AAAAAAAAAgI/5SSc9PtZaU8/s1600/ReSharper60RazorNavigation.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 4&lt;/b&gt;: New support in Razor for Controller action resolution&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;So now I have the familiar ReSharper support for just navigating to a method from a calling piece of code. It just so happens here that ReSharper understands the routes setup within an MVC application.&lt;br /&gt;&lt;br /&gt;Also notice in this version of ReSharper the familiar "type" box, whether you get this via CTRL + Click or CTRL + T, now shows you the actual project the type lives. This is another powerful feature if the namespaces do not match up to assemblies. &lt;br /&gt;&lt;br /&gt;You can get the above menu displayed simply by pressing CTRL + then click the action.&lt;br /&gt;&lt;br /&gt;Pressing those key combinations displays a list of methods that match the action name for the controller that generated the view. To navigate to a given action, simply click the desired one in the pop up list, ReSharper will then open that source code and place your cursor at that method.&lt;br /&gt;&lt;br /&gt;Notice the above action name is &lt;u&gt;underlined&lt;/u&gt;. ReSharper uses this notation to signify that the action or type has been resolved successfuly. This is new when it comes to string types as the action name passed to the Html class is actually a string.&lt;br /&gt;&lt;br /&gt;So as before if we now mistype an action that doesn't exist anywhere, ReSharper kindly lets us know there is an issue:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-yFLRbONV9Ic/Tn4pAI4n23I/AAAAAAAAAgM/YBQ26-LK7To/s1600/ReSharper60RazorActionNavigationError.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-yFLRbONV9Ic/Tn4pAI4n23I/AAAAAAAAAgM/YBQ26-LK7To/s1600/ReSharper60RazorActionNavigationError.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 4&lt;/b&gt;: ReSharper 6.0 tells us when the action cannot be resolved!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I really like the above feature. It can save you time. Also notice as the above error gets marked on the right side of the source window above, this is a standard ReSharper feature. Because it's been marked red, it means it's an error.&lt;br /&gt;&lt;br /&gt;Although the code will compile and run as before, ReSharper is doing it's best to let you know there is a problem and should be fixed.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Controller to view navigation (RS 6.0)&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;As we looked earlier, there is a bit of support for Controller to view navigation in ReSharper 5.1, but it gets better in ReSharper 6.0.&lt;br /&gt;&lt;br /&gt;So now in version 6.0, placing the mouse cursor over the call to the View method within the controllers (or which ever base controller method is being called) no longer displays the overloads as it did before, instead you get a tool tip that gives you the physical location of the view. In this case we are using Razor so it is the &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;.cshtml&lt;/span&gt; file:&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kVu_cm1LS90/Tn4sms_F3qI/AAAAAAAAAgQ/kihiN4Ug0k8/s1600/ReSharper60_FindViewViaController.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-kVu_cm1LS90/Tn4sms_F3qI/AAAAAAAAAgQ/kihiN4Ug0k8/s1600/ReSharper60_FindViewViaController.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;b&gt;Figure 5&lt;/b&gt;: In ReSharper 6.0, you can see the physical location of the actual view file from the controllers&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I really like the above feature, it just means you have to think less!&lt;br /&gt;&lt;br /&gt;There are more features to ReSharper 6.0 but the above ones are the ones I thought were the best, enjoy! &lt;br /&gt;&lt;br /&gt;You can download a free 30-day trial of ReSharper 6.0 for Visual Studio 2010 from here: &lt;a href="http://www.jetbrains.com/resharper/"&gt;http://www.jetbrains.com/resharper/&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2370553539300063781?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2370553539300063781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2370553539300063781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2370553539300063781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2370553539300063781'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/09/resharper-6-now-supports-aspnet-mvc-3.html' title='ReSharper 6 now supports ASP.NET MVC 3'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-mfPzUsLi13s/Tn2QwcsMc1I/AAAAAAAAAfw/hnIIERz5Rj8/s72-c/resharper6.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5989121140170614993</id><published>2011-09-22T21:05:00.000Z</published><updated>2011-09-22T19:23:23.338Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio .NET 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Removing the dreaded #regions using Visual Studio</title><content type='html'>Back when .NET was released in 2001, the #region/#&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;endregion&lt;/span&gt; feature seemed like a good idea at the time. I think it was more a novelty than anything.&lt;br /&gt;&lt;br /&gt;If you are a seasoned .NET developer you will probably know what #regions are and how annoying they can be (or you might support them, shame). For those who don't know what they are, this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;MSDN&lt;/span&gt; page might help explain #regions a little: &lt;a href="http://msdn.microsoft.com/en-us/library/9a1ybwek.aspx"&gt;http://msdn.microsoft.com/en-us/library/9a1ybwek.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There have been many posts about #regions over the years. There was one I was reading recently that claimed #regions are a sign of &lt;a href="http://en.wikipedia.org/wiki/Code_smell"&gt;code smell&lt;/a&gt;! That is pushing it a bit, they are not code smells but are very annoying and if I used #regions it might say something about my code. It might say that I write large &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;bloat&lt;/span&gt; god type classes that need regions to split it up in order to maintain it more easily - that you could argue could *potentially* lead to a code smell.&lt;br /&gt;&lt;br /&gt;When I open some source code file, often it will not be my code or sometimes it might be. Lets assume its not. Lets also assume that the developer of that source code like regions. The first thing I get is the screen shot below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://byfiles.storage.live.com/y1pDXOK9sSmcu_Q9pMipSxcKfE8f8W021h4gjwonwj3V_PNl2DypPVxbawazplimPucDXJ9w8yyUeY/GodClass_withregions.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 590px; height: 543px;" src="https://byfiles.storage.live.com/y1pDXOK9sSmcu_Q9pMipSxcKfE8f8W021h4gjwonwj3V_PNl2DypPVxbawazplimPucDXJ9w8yyUeY/GodClass_withregions.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 1:&lt;/span&gt; God class with regions and outlining feature turned on&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So now in order to understand this &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;GodClass&lt;/span&gt;, I'm going to have to expand all those regions as I didn't write this code. All I want to do is get at the code to understand it, these #regions are preventing, or rather, making it more difficult for me from doing so.&lt;br /&gt;&lt;br /&gt;The title to this post reads "Removing the dreaded #regions using Visual Studio". So if you're in a shop that loves to use #regions or your code base is such that to remove all the #regions would be weeks of work, fear not! I didn't know this feature existed in Visual Studio up until a couple of days ago but you can actually turn off the *outlining feature* that makes #regions possible.&lt;br /&gt;&lt;br /&gt;To turn off this feature do the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In Visual Studio click &lt;span style="font-weight: bold;"&gt;Tools -&amp;gt; Options&lt;/span&gt;&lt;/li&gt;&lt;li&gt;In the options &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;tree view&lt;/span&gt;, click &lt;span style="font-weight: bold;"&gt;Text Editor -&amp;gt; C# -&amp;gt; Advanced&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;untick&lt;/span&gt; option &lt;span style="font-weight: bold;"&gt;Enter outlining mode when files open &lt;/span&gt;(see figure 2 below for an example)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Enjoy!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://byfiles.storage.live.com/y1pAkwU2uPwaTLIULfp2AHiKWb-83Nsxf89v0RGvYPpo9qXPlMMCzC63-539LNkFIcBfutsWfPrToU/TurnoffOutlininginVisualStudio.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 644px; height: 375px;" src="https://byfiles.storage.live.com/y1pAkwU2uPwaTLIULfp2AHiKWb-83Nsxf89v0RGvYPpo9qXPlMMCzC63-539LNkFIcBfutsWfPrToU/TurnoffOutlininginVisualStudio.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 2:&lt;/span&gt; Turning off #region support in Visual Studio&lt;br /&gt;&lt;br /&gt;As far as I am aware there doesn't seem to be support for this if you're using VB.NET. This only seems to be a C# feature right now.&lt;br /&gt;&lt;br /&gt;So now if I load the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;GodClass&lt;/span&gt; in Visual Studio, I get the following source code:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://byfiles.storage.live.com/y1pbCkuz7B51oVa87IaG021yxI-AVQ1_9PZH3AhWeyoiCkXc8jRJMCZy4VvWNkxColR8AEdhJqk7qQ/GodClass_withregionsTurnedOff.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 814px; height: 825px;" src="https://byfiles.storage.live.com/y1pbCkuz7B51oVa87IaG021yxI-AVQ1_9PZH3AhWeyoiCkXc8jRJMCZy4VvWNkxColR8AEdhJqk7qQ/GodClass_withregionsTurnedOff.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 3:&lt;/span&gt; Outlining turned off&lt;br /&gt;&lt;br /&gt;It's not perfect I admit as the regions are still there, but at least I can now see the code without having multiple mouse clicks in doing so...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5989121140170614993?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5989121140170614993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5989121140170614993' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5989121140170614993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5989121140170614993'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/09/removing-dreaded-regions-using-visual.html' title='Removing the dreaded #regions using Visual Studio'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2551449335395485552</id><published>2011-09-22T18:00:00.000Z</published><updated>2011-09-22T16:10:55.088Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8 pre-beta'/><title type='text'>Windows 8 pre-beta: DRIVER_IRQL_NOT_LESS_OR_EQUAL (storahci.sys)</title><content type='html'>After the announcement of Windows 8 pre-beta at the Microsoft BUILD conference recently I was dying to install the pre-beta release of Windows 8.&lt;br /&gt;&lt;br /&gt;So I downloaded a developer edition from MSDN here: &lt;a href="http://msdn.microsoft.com/en-us/windows/apps/br229516"&gt;http://msdn.microsoft.com/en-us/windows/apps/br229516&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft offer a couple different pre-built ISO images, 32-bit, 64-bit and 64-bit with a early release of DEV11 and a early cut of Expression Blend 5. Which one did you think I downloaded! ? :)&lt;br /&gt;&lt;br /&gt;My client VM tool of choice of late is Oracle VirtualBox. I am currently  running 3.2.10 on my production laptop and cannot upgrade for reasons  that doing this will break existing VM's that I have.&lt;br /&gt;&lt;br /&gt;So disappointingly, when I attempted to install the early cut of Windows 8, I got the error in figure 1 below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://by2.storage.live.com/items/761386BECA041820%21188:Scaled1024/Windows8Driver_IRQL_NOT_LESS_OR_EQUAL_error.png?psid=1&amp;amp;ck=0&amp;amp;ex=720"&gt;&lt;img style="cursor: pointer; width: 1024px; height: 835px;" src="https://by2.storage.live.com/items/761386BECA041820%21188:Scaled1024/Windows8Driver_IRQL_NOT_LESS_OR_EQUAL_error.png?psid=1&amp;amp;ck=0&amp;amp;ex=720" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 1:&lt;/span&gt; Error when attempting to install pre-beta Windows 8 ISO&lt;br /&gt;&lt;br /&gt;Also, it seems the VM also consumes aload of CPU resource when the above error occurs until you kill the VM. See figure 2 below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://byfiles.storage.live.com/y1p4mMhjT72xSVOa87GiMKBU0ZF0leB4yDzQqyi1TCYSw3NU5PpDwoU5MBxGVhtX4ZyCgOj9Ohngsk/Windows8VirtualBoxMaxingOutCpu.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 943px; height: 807px;" src="https://byfiles.storage.live.com/y1p4mMhjT72xSVOa87GiMKBU0ZF0leB4yDzQqyi1TCYSw3NU5PpDwoU5MBxGVhtX4ZyCgOj9Ohngsk/Windows8VirtualBoxMaxingOutCpu.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 2:&lt;/span&gt; CPU consumption after Windows 8 fails to start&lt;br /&gt;&lt;br /&gt;After searching the internet for this error, I came across the Windows 8 team blog post that lists the Virtualization technologies that are supported by this drop of Windows 8 &lt;a href="http://blogs.msdn.com/b/b8/archive/2011/09/16/running-windows-8-developer-preview-in-a-virtual-environment.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I recommend you read the blog post link above before installation of Windows 8 pre-beta.&lt;br /&gt;&lt;br /&gt;So the next thing I tried was to run the latest version of VirtualBox which is 4.1.2 on another machine as I couldn't upgrade my production laptop. After doing this and attempting the Windows 8 install again, I got another completely different cryptic error message which haulted the installation.&lt;br /&gt;&lt;br /&gt;The next thing to try (which is what I should have done to begin with) was to use one of my physical Windows Server 2008 R2 Hyper V box to host the OS and thankfully, it worked!!&lt;br /&gt;&lt;br /&gt;So shortly after I fired up the Windows 8 install wizard I was presented with the licence terms agreement for this early release:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://by2.storage.live.com/items/761386BECA041820%21341:Scaled1024/Windows8LicenceAgreement.png?psid=1&amp;amp;ck=0&amp;amp;ex=720"&gt;&lt;img style="cursor: pointer; width: 1024px; height: 857px;" src="https://by2.storage.live.com/items/761386BECA041820%21341:Scaled1024/Windows8LicenceAgreement.png?psid=1&amp;amp;ck=0&amp;amp;ex=720" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Figure 3&lt;/span&gt;: Windows 8 pre-beta licence agreement with dev 11&lt;br /&gt;&lt;br /&gt;So far it seems fairly stable, I haven't seen any crashes yet and really just trying it out. I'm not quite brave enough to put it onto my physical main laptop just yet...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2551449335395485552?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2551449335395485552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2551449335395485552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2551449335395485552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2551449335395485552'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/09/windows-8-pre-beta-driverirqlnotlessore.html' title='Windows 8 pre-beta: DRIVER_IRQL_NOT_LESS_OR_EQUAL (storahci.sys)'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-814004086951458478</id><published>2011-08-12T21:57:00.002Z</published><updated>2011-08-12T21:59:57.739Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>To IServiceLocator or not</title><content type='html'>I have written a new post on my other blog about the Service Locator pattern here: &lt;a href="http://smart421.wordpress.com/2011/08/12/to-iservicelocator-or-not/"&gt;http://smart421.wordpress.com/2011/08/12/to-iservicelocator-or-not/&lt;/a&gt;&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/38895959-814004086951458478?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/814004086951458478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=814004086951458478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/814004086951458478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/814004086951458478'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/08/to-iservicelocator-or-not.html' title='To IServiceLocator or not'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1717989507472531209</id><published>2011-06-03T06:01:00.000Z</published><updated>2011-06-03T06:16:09.126Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><category scheme='http://www.blogger.com/atom/ns#' term='CQRS'/><title type='text'>CQRS – the future for low-latency systems…</title><content type='html'>I wrote a post on my other blog here: &lt;a href="http://smart421.wordpress.com/2011/06/02/cqrs-the-future-for-low-latency-systems/"&gt;http://smart421.wordpress.com/2011/06/02/cqrs-the-future-for-low-latency-systems/&lt;/a&gt; that is about pure &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CQRS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I have been interested in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CQRS&lt;/span&gt; for sometime now and I wrote this off the back of a recent &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CWDNUG&lt;/span&gt; session in London a few days ago: &lt;a href="http://www.meetup.com/cwdnug/events/18182511/"&gt;http://www.meetup.com/cwdnug/events/18182511/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1717989507472531209?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1717989507472531209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1717989507472531209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1717989507472531209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1717989507472531209'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/06/cqrs-future-for-low-latency-systems.html' title='CQRS – the future for low-latency systems…'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-662111062824019799</id><published>2011-05-27T21:25:00.001Z</published><updated>2011-06-01T05:22:53.784Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Next UK ALM User Group Meeting June 8th 2011</title><content type='html'>Register here: &lt;a href="http://uk-alm-june-2011.eventbrite.com/"&gt;http://uk-alm-june-2011.eventbrite.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I always find these meetings really interesting. So you there!&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);" class=" down" style="display: block;" id="formatbar_CreateLink" title="Link"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Link" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-662111062824019799?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/662111062824019799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=662111062824019799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/662111062824019799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/662111062824019799'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/05/next-uk-alm-user-group-june-8th-2011.html' title='Next UK ALM User Group Meeting June 8th 2011'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5409468762768476464</id><published>2011-05-27T21:20:00.001Z</published><updated>2011-05-27T20:22:50.326Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Anyone actually using Workflow for builds in Team Build 2010</title><content type='html'>I have been using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;TFS&lt;/span&gt; 2010 since the early releases and I am very impressed with its features, some of which I have blogged about here: &lt;a href="http://www.simonrhart.com/search/label/TFS"&gt;http://www.simonrhart.com/search/label/TFS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But whenever I have tried using the new Team Build 2010 Build Template &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Workflow&lt;/span&gt; (which is based on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;MSBuild&lt;/span&gt; under the covers) I find it more difficult to navigate and manage. Not to mention there are not many activities around for things like, running &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;StyleCop&lt;/span&gt; rules, creating &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;IIS&lt;/span&gt; virtual directories, managing service accounts etc.&lt;br /&gt;&lt;br /&gt;So the real question is, why would I use &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Workflow&lt;/span&gt; over pure &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;MSBuild&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I am very impressed with the &lt;a href="http://msbuildextensionpack.codeplex.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;MSBuild&lt;/span&gt; Extension Pack&lt;/a&gt; that contains many tasks that covers the things I mentioned above and more. I also know there is a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;MSBuild&lt;/span&gt; activity which means you can make use of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;MSBuild&lt;/span&gt; Extension Pack from within &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Workflow&lt;/span&gt; but this kind of defeats the purpose of using &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Workflow&lt;/span&gt; in the first place.&lt;br /&gt;&lt;br /&gt;I also often want the ability to run a build locally before check-in. This build is normally a nightly build which not only compiles code, runs unit tests and acceptance tests etc but it sets up the environment. i.e. if you have a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;BizTalk&lt;/span&gt; solution and you need to deploy the bindings, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;schema's&lt;/span&gt;, maps etc the &lt;a href="http://biztalkdeployment.codeplex.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;BTDF&lt;/span&gt;&lt;/a&gt; can be used to help facilitate this &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;easily&lt;/span&gt;. Well when I say &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;easily&lt;/span&gt; there is a bit of work to get this to work with Team Build that I will blog about soon...&lt;br /&gt;&lt;br /&gt;I know in Team Build 2010 there is the new gated-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;check in&lt;/span&gt; feature that shelves changes, runs a build against the shelved changes then merges with the branch in question if successful. This is great but only half the story. On every get-latest I want the developers machine to be setup and be able to run the latest code. If another developer has added a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;WCF&lt;/span&gt; service with a new app pool or added a receive port, this script needs to take care of all that without each developer even thinking about it.&lt;br /&gt;&lt;br /&gt;With the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Workflow&lt;/span&gt; build templates, there is no way to run those builds locally. The gated-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;check in&lt;/span&gt; is an additional feature that addresses the problem of the developer not running a local build otherwise known as a "buddy build" before he/she checks in to prevent build failures.&lt;br /&gt;&lt;br /&gt;To date, I use the "Upgrade Template" in Team Build 2010. I was wondering if anyone was actually using the Default Templates based on pure &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Workflow&lt;/span&gt;?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5409468762768476464?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5409468762768476464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5409468762768476464' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5409468762768476464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5409468762768476464'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/05/anyone-actually-using-workflow-for.html' title='Anyone actually using Workflow for builds in Team Build 2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6846087644328846534</id><published>2011-05-22T23:10:00.000Z</published><updated>2011-05-22T16:58:29.204Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>Microsoft.BizTalk.TestTools.Mapper.TestableMapBase erroring in Team Build</title><content type='html'>Have you recently attempted to use the &lt;span style="font-family:courier new;"&gt;Microsoft.BizTalk.TestTools.Mapper.TestableMapBase&lt;/span&gt; (This class enables you to test BizTalk maps programmatically through MSTest or NUnit) on the build server as a CI process or otherwise through some sort of test harness, if so, you might have received the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.BizTalk.TOM, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This was happening in a new development environment during the execution of MSTest unit tests against BizTalk 2010 Developer Edition and a Team Foundation 2010 build during a CI build process.&lt;br /&gt;&lt;br /&gt;After searching around and reading various blog posts, I couldn't find the solution other than to repair BizTalk. This sounded rather drastic to fix a simple error. So I then decided to do the normal thing a .NET developer would do and check the GAC for the file &lt;span style="font-family:courier new;"&gt;Microsoft.BizTalk.TOM&lt;/span&gt;. I failed to find it so I guess the BizTalk installation must have failed somewhere, as I didn't install BizTalk on that machine it's hard to know.&lt;br /&gt;&lt;br /&gt;So I then decided to GAC the file. Looking for GACUTIL.exe, I soon realised and remembered that GACUTIL is not supplied with the .NET Framework. As this was a build server, I didn't have Visual Studio installed. Then I remembered I installed the Windows Server SDK v6.1 on this machine so that I could actually build code and run tests (due to various build targets that comes with the Windows Server SDK). When you install the Windows SDK it comes with a CMD.cmd file and GACUTIL.exe (among other things) that sets up the environment ready to use the various tools.&lt;br /&gt;&lt;br /&gt;So to fix this missing assembly issue:&lt;br /&gt;&lt;br /&gt;1. if you don't have the Windows SDK installed install it (latest version at the time of writing is&lt;br /&gt;v6.1)&lt;br /&gt;2. Once the SDK is installed, run this: &lt;span style="font-family:courier new;"&gt;C:\Windows\System32\cmd.exe /E:ON /V:ON /T:0E /K "D:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\SetEnv.Cmd"&lt;/span&gt; This is assuming you have installed the SDK on a drive D.&lt;br /&gt;3. Run the following command: &lt;span style="font-family:courier new;"&gt;GACUTIL C:\Program Files (x86)\Common Files\Microsoft BizTalk\Microsoft.BizTalk.TOM.dll -i&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Queue a build, or attempt to run the app using the map test class and all should be well (unless you have other issues!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6846087644328846534?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6846087644328846534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6846087644328846534' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6846087644328846534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6846087644328846534'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/05/microsoftbiztalktesttoolsmappertestable.html' title='Microsoft.BizTalk.TestTools.Mapper.TestableMapBase erroring in Team Build'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8325192217130720974</id><published>2011-05-22T17:10:00.003Z</published><updated>2011-05-22T16:44:44.835Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><category scheme='http://www.blogger.com/atom/ns#' term='Team Build 2010'/><title type='text'>Administrative access in Team Build 2010 for creating IIS AppPools etc</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1pKXzwROx97ukgcprg1gcsSbC-3umvOLvNJBRne5OdE7ry6B1qKs6qoI1Bh_Kfi7NkG9yA9JF0Oy4FDyH8_HSt398z1IuS8C_9/tfs%202010.png?psid=1"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 809px; height: 208px;" src="http://abzw0w.bay.livefilestore.com/y1pKXzwROx97ukgcprg1gcsSbC-3umvOLvNJBRne5OdE7ry6B1qKs6qoI1Bh_Kfi7NkG9yA9JF0Oy4FDyH8_HSt398z1IuS8C_9/tfs%202010.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;I have recently been using the MSBuild Extension Pack over on codeplex available here: &lt;a href="http://msbuildextensionpack.codeplex.com/"&gt;http://msbuildextensionpack.codeplex.com/&lt;/a&gt;. I came across an issue (build failing) recently where I was trying to write DNS entries to the local HOSTS file and also attempting to create IIS Application Pools and users etc using various tasks provided by the MSBuild Extension Pack.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I have separate build servers 1 for CI and 1 for Integration both of which run Team Build 2010 and the build service runs under a domain user account.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Of course attempting to do the above things require local administrative access to the machine on which you attemp to create App Pools, add DNS entries etc. So I fired up Computer Management and added the TFSBUILD service account to the local Administrators group.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;After doing this, I queued a build and it still failed. After looking through the logs in more detail and checking Team Build configuration, all looked correct. I then logged onto the machine using the TFSBUILD account and attempted to perform an administrative action like edit the HOSTS file which I was successfully able to do. I also looked in the Event Log for any errors that might give me a clue as to why it was failing, but nothing there.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In the end I restarted the build controller, queued a build and it worked!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So I'm guessing that security permissions are cached in Team Build.&lt;br /&gt;&lt;br /&gt;For information purposes, I'm running Team Build on separate Windows Server 2008 R2 machines from the databases and App Tiers. I'm also using the Upgrade Template so using core MSBuild 4.0 - not Workflow to execute the builds.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8325192217130720974?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8325192217130720974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8325192217130720974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8325192217130720974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8325192217130720974'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/05/administrative-access-in-team-build.html' title='Administrative access in Team Build 2010 for creating IIS AppPools etc'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4699585595005053878</id><published>2011-04-10T12:30:00.007Z</published><updated>2011-04-10T13:28:07.384Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><category scheme='http://www.blogger.com/atom/ns#' term='Broadband'/><title type='text'>At last broadband speeds as promised with Virgin Media and Fibre optic broadband</title><content type='html'>&lt;a href="http://www.speedtest.net/result/1245346220.png"&gt;&lt;img style="WIDTH: 300px; HEIGHT: 135px; CURSOR: hand" border="0" alt="" src="http://www.speedtest.net/result/1245346220.png" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;div&gt;&lt;strong&gt;Norwich broadband speeds over fibre optic cables&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I recently changed from old copper cable based broadband provided by &lt;a href="http://www.zen.co.uk/"&gt;Zen Internet&lt;/a&gt; to fibre optic provided by Virgin Media, and I must say I am wowed by it's performance. See above. I am paying for 30&lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;mbps&lt;/span&gt; and I am getting 30&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;mbps&lt;/span&gt;!! fancy that, actually getting what you pay for. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;For the first time, I can now stream movies from &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;lovefilm&lt;/span&gt; directly through my media centre with no stuttering....&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Previously I was paying £25 per month for 8&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;mbps&lt;/span&gt; over copper lines but actually only getting (if I was lucky) 1 &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;mbps&lt;/span&gt;. Now I am paying £21.49 for 6 months then £30.74 and that includes the phone line. &lt;/div&gt;&lt;br /&gt;&lt;div&gt;The last time I wrote a blog on this was when I was living in &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;Guildford&lt;/span&gt;, South East England, here: &lt;a href="http://www.simonrhart.com/2009/03/broadband-speed-test-south-east-england.html"&gt;http://www.simonrhart.com/2009/03/broadband-speed-test-south-east-england.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;It still amazes me how broadband service &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-corrected"&gt;company's&lt;/span&gt; can charge you a certain fee for a service you have no way of getting. Imagine if this logic was used in all industries, like the motoring industry. You take your car in to have the tyres replaced, but the &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-corrected"&gt;garage&lt;/span&gt; charges you for a full service instead!! madness!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4699585595005053878?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4699585595005053878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4699585595005053878' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4699585595005053878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4699585595005053878'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/04/at-last-broadband-speeds-as-promised.html' title='At last broadband speeds as promised with Virgin Media and Fibre optic broadband'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8172926809646869184</id><published>2011-03-28T20:24:00.006Z</published><updated>2011-03-28T20:57:10.477Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Unnecessary context scrolling in VS 2010 fixed in VS2010 SP1!!</title><content type='html'>I published a blog post last year regarding the unnecessary context scrolling in Visual Studio 2010 here: &lt;a href="http://www.simonrhart.com/2010/04/turning-off-context-menu-scrolling-in.html"&gt;http://www.simonrhart.com/2010/04/turning-off-context-menu-scrolling-in.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This has been fixed in SP1 of VS2010 and can be downloaded here: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;A list of things that has been updated can be found here: &lt;a href="http://support.microsoft.com/kb/983509"&gt;http://support.microsoft.com/kb/983509&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This particular fix applies to this: &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/533342"&gt;https://connect.microsoft.com/VisualStudio/feedback/details/533342&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1pO35KN5ZOcXdFHntv5ZKcRlqff543rUJhx_TNXeQ1jQ2hS7EkLDbPRThlpGzsb6SpxxxjqLnyyv_Se57NLga0MXZ45bQ6XZ6z/VS2010sp1.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 780px; height: 580px;" src="http://abzw0w.bay.livefilestore.com/y1pO35KN5ZOcXdFHntv5ZKcRlqff543rUJhx_TNXeQ1jQ2hS7EkLDbPRThlpGzsb6SpxxxjqLnyyv_Se57NLga0MXZ45bQ6XZ6z/VS2010sp1.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I tested this fix against the VS2010 SP1 beta (above) as it does seem to be fixed, so well done Microsoft!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8172926809646869184?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8172926809646869184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8172926809646869184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8172926809646869184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8172926809646869184'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/unnecessary-context-scrolling-in-vs.html' title='Unnecessary context scrolling in VS 2010 fixed in VS2010 SP1!!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4205155581592761666</id><published>2011-03-28T19:26:00.002Z</published><updated>2011-03-28T19:44:16.348Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk ESB Toolkit 2.1'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>Management_Install.ps1 cannot be loaded because the execution of scripts is disabled on this system</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1puuxSnJHSmjdM6du0Skz2aye_uRvRXUfUiVgidVQGPIUSVHRbnF7YL_ziuA9Fm0qqHgnvaqUDqb6Qv8HRyzbb7j4jyRGOenFX/installing%20ESB%20Management%20Portal.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 668px; height: 595px;" src="http://abzw0w.bay.livefilestore.com/y1puuxSnJHSmjdM6du0Skz2aye_uRvRXUfUiVgidVQGPIUSVHRbnF7YL_ziuA9Fm0qqHgnvaqUDqb6Qv8HRyzbb7j4jyRGOenFX/installing%20ESB%20Management%20Portal.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You might have seen the above when attempting to install the BizTalk ESB Management Portal on a 64-bit operating system.&lt;br /&gt;&lt;br /&gt;This particular error has been talked about a lot in the community with the solution but I wanted to detail here in a little bit more detail.&lt;br /&gt;&lt;br /&gt;It requires Visual Studio 2010 to compile the code so this is for a development environment:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start the Windows Powershell command window from the following path: &lt;span style="font-weight: bold;"&gt;C:\Windows\syswow64\WindowsPowerShell\v1.0\Powershell.exe&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Edit the Management_Install.ps1 script and alter the line that sets the VS environment variable to this: &lt;span style="font-weight: bold;"&gt;$env:VS="${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Run: &lt;span style="font-weight: bold;"&gt;set-executionpolicy unrestricted&lt;/span&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on" style="display: block;" id="formatbar_Bold" title="Bold" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 3);ButtonMouseDown(this);"&gt;&lt;img src="img/blank.gif" alt="Bold" class="gl_bold" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Run the &lt;span style="font-weight: bold;"&gt;Management_Install.bat&lt;/span&gt; from the current powershell command window (don't forget to include current directory i.e. &lt;span style="font-weight: bold;"&gt;.\Management_Install.bat &lt;/span&gt;(notice the .\)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The above should successfully use Visual Studio to build the Management Portal. Of course a better way of doing it would be to use something other than Visual Studio like pure MSBuild.&lt;br /&gt;&lt;br /&gt;I need to write something that is suitable for a production environment, so when I do I'll post it here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4205155581592761666?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4205155581592761666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4205155581592761666' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4205155581592761666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4205155581592761666'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/managementinstallps1-cannot-be-loaded.html' title='Management_Install.ps1 cannot be loaded because the execution of scripts is disabled on this system'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8410370929911940434</id><published>2011-03-24T22:16:00.002Z</published><updated>2011-03-24T22:20:48.723Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Error: Cannot import wsdl:portType</title><content type='html'>I recently published a post on fixing an error you might get using the WCF SVCUTIL.exe utility when creating WCF service contracts from WSDL documents here: &lt;a href="http://smart421.wordpress.com/2011/03/24/error-cannot-import-wsdlporttype/"&gt;http://smart421.wordpress.com/2011/03/24/error-cannot-import-wsdlporttype/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8410370929911940434?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8410370929911940434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8410370929911940434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8410370929911940434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8410370929911940434'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/error-cannot-import-wsdlporttype.html' title='Error: Cannot import wsdl:portType'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-7971046647304661419</id><published>2011-03-17T18:47:00.003Z</published><updated>2011-03-17T18:55:52.518Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk ESB Toolkit 2.1'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>Deploying View... ERROR: The BAM deployment failed. Internal error: The operation terminated unsuccessfully.</title><content type='html'>I wrote a blog post recently on how to overcome the issue of not having the BAMStarSchema database when attempting to deploy the BAM ESB exceptions definition files as part of a Microsoft BizTalk 2010 ESB Toolkit 2.1 installation. This post can be found here: &lt;a href="http://www.simonrhart.com/2011/02/bam-star-schema-database-has-not-been.html"&gt;http://www.simonrhart.com/2011/02/bam-star-schema-database-has-not-been.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After you get past that and you have a BAMStarSchema database you might then see the following error:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Deploying Activity... Done.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Deploying View... ERROR: The BAM deployment failed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Internal error: The operation terminated unsuccessfully.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ed by the login. The login failed.; 42000.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the high-level relational engine. A connection could not be made to th&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;e data source with the DataSourceID of 'bam_ExcByApplication', Name of 'bam_ExcB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;yApplication'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the dimension, with t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;he ID of 'ExcByApplication_ExcDatetime', Name of 'ExcByApplication_ExcDatetime'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the 'Month' attribute&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; of the 'ExcByApplication_ExcDatetime' dimension from the 'BAMAnalysis' database&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Server: The operation has been cancelled.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ed by the login. The login failed.; 42000.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the high-level relational engine. A connection could not be made to th&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;e data source with the DataSourceID of 'bam_ExcByApplication', Name of 'bam_ExcB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;yApplication'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the dimension, with t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;he ID of 'ExcByApplication_Application', Name of 'ExcByApplication_Application'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the 'Application' att&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ribute of the 'ExcByApplication_Application' dimension from the 'BAMAnalysis' da&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;tabase was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ed by the login. The login failed.; 42000.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the high-level relational engine. A connection could not be made to th&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;e data source with the DataSourceID of 'bam_ExcByApplication', Name of 'bam_ExcB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;yApplication'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the dimension, with t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;he ID of 'ExcByApplication_ExcFaultDescription', Name of 'ExcByApplication_ExcFa&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ultDescription' was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the 'FaultDescription&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;' attribute of the 'ExcByApplication_ExcFaultDescription' dimension from the 'BA&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;MAnalysis' database was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ed by the login. The login failed.; 42000.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the high-level relational engine. A connection could not be made to th&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;e data source with the DataSourceID of 'bam_ExcByApplication', Name of 'bam_ExcB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;yApplication'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the dimension, with t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;he ID of 'ExcByApplication_ExcDatetime', Name of 'ExcByApplication_ExcDatetime'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the 'Year' attribute&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;of the 'ExcByApplication_ExcDatetime' dimension from the 'BAMAnalysis' database&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;OLE DB error: OLE DB or ODBC error: Cannot open database "BAMStarSchema" request&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ed by the login. The login failed.; 42000.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the high-level relational engine. A connection could not be made to th&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;e data source with the DataSourceID of 'bam_ExcByApplication', Name of 'bam_ExcB&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;yApplication'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the dimension, with t&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;he ID of 'ExcByApplication_ExcDatetime', Name of 'ExcByApplication_ExcDatetime'&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;was being processed.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Errors in the OLAP storage engine: An error occurred while the 'Day' attribute o&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;f the 'ExcByApplication_ExcDatetime' dimension from the 'BAMAnalysis' database w&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;as being processed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This essentially means that the SQL Server user account is not added to the 'db_datareader' role in order to read the BAMStarSchema database.&lt;br /&gt;&lt;br /&gt;Simple soultion to fix this is to add the SQL Server service user to that role for the BAMStarSchema database. I this is a development machine, I am running SQL Server under the &lt;span style="font-family: courier new;"&gt;NT AUTHORITY\NETWORK SERVICE&lt;/span&gt; account, so the SQL to fix this could look like the following:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;use BAMStarSchema&lt;/span&gt;&lt;br /&gt; &lt;span style="font-family: courier new;"&gt;EXEC sp_addrolemember 'db_datareader', 'NT AUTHORITY\NETWORK SERVICE'&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Of course you could do this via SQL Management Studio if you wanted too.&lt;br /&gt;&lt;br /&gt;Happy BizTalking!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-7971046647304661419?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/7971046647304661419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=7971046647304661419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7971046647304661419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7971046647304661419'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/deploying-view-error-bam-deployment.html' title='Deploying View... ERROR: The BAM deployment failed. Internal error: The operation terminated unsuccessfully.'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8645239920888839176</id><published>2011-03-16T22:12:00.006Z</published><updated>2011-03-16T23:09:05.078Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>TFS Workbench: An 'WebException' exception occured during the report list load process</title><content type='html'>Have you seen the following error recently after loading &lt;a href="http://scrumforteamsystem.com/Products/Search/workbench"&gt;TFS Workbench&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;An 'WebException' exception occured during the report list load process. Error Message: The request failed with HTTP status 401: Unauthorized.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't know what TFS Workbench is, take a look at the above link. It is a great tool for managing work items and running SSRS reports in Team Foundation Server. It works with a range of Team Project process templates, I happen to be using Scrum for Team System for TFS 2010.&lt;br /&gt;&lt;br /&gt;If you are getting the above error which is really annoying, you'll see the Report Viewer button at the bottom of TFS Workbench grayed out as per the screen shot below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1poBWlr14FkptN6Bbzi4opDK1BatQxChon3RjtpxUwe-wAe-IclX03Xr-AfuJ3dD5IDsVmlgjOVuU-92g4WCI13xEDyBtUppTm/TFSWorkBenchNotWorking.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 508px; height: 245px;" src="http://abzw0w.bay.livefilestore.com/y1poBWlr14FkptN6Bbzi4opDK1BatQxChon3RjtpxUwe-wAe-IclX03Xr-AfuJ3dD5IDsVmlgjOVuU-92g4WCI13xEDyBtUppTm/TFSWorkBenchNotWorking.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The annoying thing about that error is that I get a HTTP TFS challenge when I load TFS Workbench because my client is not running within the same domain as the development environment - which is a fairly common scenario - although not ideal sometimes we have no choice.&lt;br /&gt;&lt;br /&gt;When I get this challenge I enter my DOMAIN&lt;domain&gt;\username and password, hit return and I am authenticated successfully. I know this because I am able to see my team projects in TFS Workbench. The HTTP 401 error tells me the client is able to resolve the reporting services server as if it wasn't, I would get a HTTP 404 error instead. (I added a CNAME record to the DNS server).&lt;br /&gt;&lt;br /&gt;So I &lt;span style="font-weight: bold;"&gt;*think*&lt;/span&gt; what is happening is the code is applying the current credentials for the reporting services authentication web service call but not for the TFS Web Service calls.&lt;br /&gt;&lt;br /&gt;Perhaps the code looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ReportingServicesClient client = new ReportingServicesClient();&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;client.Credentials = System.Net.CredentialCache.DefaultCredentials; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Who knows, I don't have the code nor have I decompiled it so I don't know...&lt;br /&gt;&lt;br /&gt;The solution is to simply add the name of the machine running reporting services along with the password to the Windows Credential Manager (new feature in Windows 7 and Windows Server 2008).&lt;br /&gt;&lt;br /&gt;You can load the Credential Manager from Control Panel:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1p8LwyTYy6SQWFMIU7OPGmOtEHWUhb7vCSt8Edyo4XYEhy605X0alpCO0-SdmTeRiDJHobctM2T3MibYTHQj_CLM4wm_dr4A09/CredentialManager_WindowsServer2008.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 656px; height: 330px;" src="http://abzw0w.bay.livefilestore.com/y1p8LwyTYy6SQWFMIU7OPGmOtEHWUhb7vCSt8Edyo4XYEhy605X0alpCO0-SdmTeRiDJHobctM2T3MibYTHQj_CLM4wm_dr4A09/CredentialManager_WindowsServer2008.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Then click on the &lt;span style="font-weight: bold;"&gt;Add Windows Credential&lt;/span&gt; hyperlink and enter your details in the dialog that pops up:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://abzw0w.bay.livefilestore.com/y1pwGW5yiOvVX_dRfKV47OeO-3WpcDa8B5QT-S72Owys05esElltmQeMvvfSgkl0gOHr0jxk7uR7DqcJVymPyz6G0bnvg15AjZB/CredentialManager_WindowsServer2008_Dialog.png?psid=1"&gt;&lt;img style="cursor: pointer; width: 936px; height: 446px;" src="http://abzw0w.bay.livefilestore.com/y1pwGW5yiOvVX_dRfKV47OeO-3WpcDa8B5QT-S72Owys05esElltmQeMvvfSgkl0gOHr0jxk7uR7DqcJVymPyz6G0bnvg15AjZB/CredentialManager_WindowsServer2008_Dialog.png?psid=1" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you click &lt;span style="font-weight: bold;"&gt;OK&lt;/span&gt;, reload TFS workbench as the TFS Workbench should now resolve the correct credentials for the reporting services server in the Windows Credential store instead of using the default credentials which should fix this issue.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/domain&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8645239920888839176?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8645239920888839176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8645239920888839176' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8645239920888839176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8645239920888839176'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/tfs-workbench-webexception-exception.html' title='TFS Workbench: An &apos;WebException&apos; exception occured during the report list load process'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8608461689905939381</id><published>2011-03-05T13:55:00.000Z</published><updated>2011-03-05T13:56:30.934Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Fail over cluster'/><title type='text'>The local computer is not a member of a windows failover</title><content type='html'>Don't make the same mistake as I did recently which was installing the wrong edition of Windows Server 2008 R2 in order to make use of Failover Cluster services.&lt;br /&gt;&lt;br /&gt;I installed Standard edition of Windows Server 2008 R2 but in order to make use of the Failover Cluster services and managment snap-in, you need either &lt;strong&gt;Windows Server 2008 R2 Datacentre&lt;/strong&gt; or &lt;strong&gt;Windows Server 2008 R2 Enterprise&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Attempting to install SQL Failover Cluster in standard edition will give you the following error message during the validation process: &lt;strong&gt;The local computer is not a member of a windows failover&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;This document describes the whole administration process: &lt;a href="http://technet.microsoft.com/en-us/library/cc731844%28WS.10%29.aspx"&gt;http://technet.microsoft.com/en-us/library/cc731844(WS.10).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8608461689905939381?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8608461689905939381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8608461689905939381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8608461689905939381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8608461689905939381'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/12/local-computer-is-not-member-of-windows.html' title='The local computer is not a member of a windows failover'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4228983391796154083</id><published>2011-03-03T04:25:00.005Z</published><updated>2011-03-03T04:35:52.820Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>In Seattle at the MVP Summit 2011</title><content type='html'>&lt;a href="http://www.city-data.com/forum/attachments/city-vs-city/46255d1249060158-seattle-vs-vancouver-skyline-looks-better-bigstockphoto_seattle_panorama_30945932.jpg"&gt;&lt;img style="width: 1600px; height: 1064px;" alt="" src="http://www.city-data.com/forum/attachments/city-vs-city/46255d1249060158-seattle-vs-vancouver-skyline-looks-better-bigstockphoto_seattle_panorama_30945932.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Well I have to say what a great event this year at the MVP Summit 2011. As always Microsoft has done a great job to give us the best experience they possibly can.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;This is my 3rd summit and they just keep getting better and better like a fine wine....&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Of course I am under NDA so what goes on in Redmond stays in Redmond! It was also a pleasure to catchup with some old friends.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4228983391796154083?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4228983391796154083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4228983391796154083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4228983391796154083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4228983391796154083'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/in-seattle-at-mvp-summit-2011.html' title='In Seattle at the MVP Summit 2011'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8884997509299850508</id><published>2011-03-01T12:49:00.001Z</published><updated>2011-03-01T12:50:35.632Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>Using the Guard pattern to simplify code contracts</title><content type='html'>I've just published a post on my other blog regarding implementing the Guard pattern in your .NET apps and where Microsoft is taking this approach...&lt;br /&gt;&lt;br /&gt;Read it here: &lt;a href="http://smart421.wordpress.com/2011/03/01/using-the-guard-pattern-to-simplify-code-contracts/"&gt;http://smart421.wordpress.com/2011/03/01/using-the-guard-pattern-to-simplify-code-contracts/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8884997509299850508?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8884997509299850508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8884997509299850508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8884997509299850508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8884997509299850508'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/03/using-guard-pattern-to-simplify-code.html' title='Using the Guard pattern to simplify code contracts'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3757955356674379655</id><published>2011-02-26T14:20:00.010Z</published><updated>2011-03-17T18:58:03.127Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk ESB Toolkit 2.1'/><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>The BAM Star Schema database has not been configured. Run bm.exe setup-databases to configure the database</title><content type='html'>If you have tried setting up the BizTalk ESB Toolkit 2.1 to work with BizTalk 2010 and you're interested in BAM (Business Application Monitoring) for anything going onto and through the bus using BAM (nice feature) then you may get the following error when attempting to deploy the BizTalk ESB BAM definition files for exception handling and itinerary events:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;C:\Program Files (x86)\Microsoft BizTalk Server 2010\Tracking&gt;bm deploy-all -Def&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;initionFile:"C:\program files (x86)\Microsoft BizTalk esb toolkit 2.1\bam\micros&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;oft.biztalk.esb.bam.exceptions.xml"&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;Microsoft (R) Business Activity Monitoring Utility Version 3.9.469.0&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;Copyright (C) Microsoft Corporation. All rights reserved.&lt;/span&gt;  &lt;span style="font-family:courier new;"&gt;Using 'BAMPrimaryImport' BAM Primary Import database on server 'FOO-BAR'.&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;..&lt;/span&gt;  &lt;span style="font-family:courier new;"&gt;Deploying Activity... Done.&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;Deploying View... ERROR: The BAM deployment failed.&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;The BAM Star Schema database has not been configured. Run bm.exe setup-databases&lt;/span&gt; &lt;span style="font-family:courier new;"&gt; to configure the database.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;These are the commands required to import the Exception and the Itinerary BAM definitions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bm.exe deploy-all -DefinitionFile:"C:\Program Files (x86)\Microsoft BizTalk ESB Toolkit 2.1\Bam\Microsoft.BizTalk.ESB.BAM.Itinerary.xml"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;and for exception handling definitions:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Bm.exe deploy-all -DefinitionFile:"C:\Program Files (x86)\Microsoft&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;BizTalk ESB Toolkit 2.1\Bam\Microsoft.BizTalk.ESB.BAM.Exception.xml"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So how do you get the &lt;span style="font-weight: bold;"&gt;BAMStarSchema&lt;/span&gt; database into SQL Server? This is not particually intuitive but it is done during the BizTalk configuration process and in particular when configuring the BAM Tools feature:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-GG_6S-qfD40/TWkQ89etBoI/AAAAAAAAAfU/99wHfHfsdas/s1600/creating%2Bthe%2BBAM%2BStar%2BSchema%2BDatabase.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 327px;" src="http://4.bp.blogspot.com/-GG_6S-qfD40/TWkQ89etBoI/AAAAAAAAAfU/99wHfHfsdas/s400/creating%2Bthe%2BBAM%2BStar%2BSchema%2BDatabase.png" alt="" id="BLOGGER_PHOTO_ID_5578008252956608130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you got the above error, it was probably likely to do with the fact you didn't check the &lt;span style="font-weight: bold;"&gt;Enable Analysis Services for BAM aggregations &lt;/span&gt;checkbox during configuration of BizTalk after setup. When you check that checkbox, two more databases will appear in the &lt;span style="font-weight: bold;"&gt;Database Name&lt;/span&gt; list; &lt;span style="font-weight: bold;"&gt;BAMAnalysis&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;BAMStarSchema&lt;/span&gt;. Clicking &lt;span style="font-weight: bold;"&gt;Apply Configuration&lt;/span&gt; creates those missing databases ready for the activity import later.&lt;br /&gt;&lt;br /&gt;Once you have created those databases, re-run the ESB BAM activity import and you should get something like the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;C:\Program Files (x86)\Microsoft BizTalk Server 2010\Tracking&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;bm&lt;/span&gt; deploy-all -Def&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;initionFile&lt;/span&gt;:"C:\program files (x86)\Microsoft &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;BizTalk&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;esb&lt;/span&gt; toolkit 2.1\&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;bam&lt;/span&gt;\micros&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;oft.biztalk.esb.bam.exceptions.xml"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Microsoft (R) Business Activity Monitoring Utility Version 3.9.469.0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Copyright (C) Microsoft Corporation. All rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Using '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;BAMPrimaryImport&lt;/span&gt;' &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;BAM&lt;/span&gt; Primary Import database on server 'FOO-BAR'.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;..&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Deploying Activity... Done.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Deploying View... Done.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Deploying Alert... Done.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Deploying Security... Done.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The import may still fail as it might be due to the way you have configured &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;SQL&lt;/span&gt; Server, then I will write another post as to what the cause of this might be sometime soon...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; If deploying Views fails for you, check this post as it might help: &lt;a href="http://www.simonrhart.com/2011/03/deploying-view-error-bam-deployment.html"&gt;http://www.simonrhart.com/2011/03/deploying-view-error-bam-deployment.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3757955356674379655?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3757955356674379655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3757955356674379655' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3757955356674379655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3757955356674379655'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/02/bam-star-schema-database-has-not-been.html' title='The BAM Star Schema database has not been configured. Run bm.exe setup-databases to configure the database'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-GG_6S-qfD40/TWkQ89etBoI/AAAAAAAAAfU/99wHfHfsdas/s72-c/creating%2Bthe%2BBAM%2BStar%2BSchema%2BDatabase.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8133514151858408288</id><published>2011-02-24T07:10:00.013Z</published><updated>2011-02-24T22:08:09.754Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='MSBuild'/><title type='text'>How to package your Windows CE applications into a CAB during a nightly build process</title><content type='html'>I just wrote a post on how to package up your Windows Mobile/Phone/CE applications into a CAB file as part of your automated build process using either TFS 2010 or TFS 2008 and MSBuild. Check it out here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://smart421.wordpress.com/2011/02/24/how-to-package-your-windows-ce-applications-into-a-cab-during-a-nightly-build-process/"&gt;http://smart421.wordpress.com/2011/02/24/how-to-package-your-windows-ce-applications-into-a-cab-during-a-nightly-build-process/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8133514151858408288?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8133514151858408288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8133514151858408288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8133514151858408288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8133514151858408288'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/02/how-to-package-your-windows-ce.html' title='How to package your Windows CE applications into a CAB during a nightly build process'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1500352812357462593</id><published>2011-02-23T22:20:00.003Z</published><updated>2011-02-23T22:58:56.923Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>My/our other blog</title><content type='html'>For the regular readers of my blog, I also blog on my companys weblog found over at &lt;a href="http://smart421.wordpress.com"&gt;http://smart421.wordpress.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you're interested in SOA and Enterprise Architecture, you'll like that blog. The stuff I write on there will be more lower code-level in most cases.&lt;br /&gt;&lt;br /&gt;Cheers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1500352812357462593?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1500352812357462593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1500352812357462593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1500352812357462593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1500352812357462593'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/02/myour-other-blog.html' title='My/our other blog'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6233878470545948912</id><published>2011-02-23T19:33:00.012Z</published><updated>2011-02-24T21:04:15.034Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='BizTalk 2010'/><title type='text'>Microsoft Notification Services Control Utility 9.0.242.0 Could not load file or assembly 'Microsoft.SqlServer.Instapi, Version=9.0.242.0</title><content type='html'>Have you seen this error recently when attempting to configure BAM Tools as part of a BizTalk 2010 installation:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-family:courier new;"&gt;2011-02-22 13:06:04:2007 [Error] BAMTools Error configuring&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Error executing bm.exe with tracing enabled. (Microsoft.BizTalk.Bam.CfgExtHelper.Utility)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Error executing process: C:\Program Files (x86)\Microsoft BizTalk Server 2010\Tracking\bm.exe (Microsoft.BizTalk.Bam.CfgExtHelper.Utility)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Microsoft (R) Business Activity Monitoring Utility Version 3.9.469.0Copyright (C) Microsoft Corporation. All rights reserved.ERROR: Failed to set up BAM database(s). There was a failure while executing nscontrol.exe. Error:"Microsoft Notification Services Control Utility 9.0.242.0╕ Microsoft Corp. All rights reserved.An error was encountered when running this command.Could not load file or assembly 'Microsoft.SqlServer.Instapi, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified." (Microsoft.BizTalk.Bam.CfgExtHelper.Utility)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This screen might be familiar to you if you have seen the above once or twice:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-ZYIr6rGLWEU/TWViog_Ig_I/AAAAAAAAAe8/cbNEEy5iMVU/s1600/Configuring%2BBAM%2Btools%2Bfailure.png"&gt;&lt;img style="width: 400px; height: 343px;" id="BLOGGER_PHOTO_ID_5576972161757250546" alt="" src="http://2.bp.blogspot.com/-ZYIr6rGLWEU/TWViog_Ig_I/AAAAAAAAAe8/cbNEEy5iMVU/s400/Configuring%2BBAM%2Btools%2Bfailure.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This message is frustrating as you need the BAM Tools configured before you can configure the BAM Portal. So even if you don't care about alerting, but you do care about BAM, you still need this to work before you can continue to the next step.&lt;br /&gt;&lt;br /&gt;After following the &lt;span style="font-weight: bold;"&gt;Installing BizTalk Server 2010 on Windows Server 2008 R2 and 2008.docx&lt;/span&gt; file, I was still getting the above exception. You can download this document here: &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b77d6a4f-8b41-470e-a58c-730dc5859b38&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=b77d6a4f-8b41-470e-a58c-730dc5859b38&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The BizTalk 2010 installation document mentions that you need to install &lt;span style="font-weight: bold;"&gt;Microsoft SQL Server 2005 Notification Services&lt;/span&gt; if you want BAM Alerts because it is not included in &lt;span style="font-weight: bold;"&gt;Microsoft SQL Server 2008 R2&lt;/span&gt; - which is the recommended SQL Server version for BizTalk 2010. You need Notification Services if you want any kind of BAM functionality - not just alerting.&lt;br /&gt;&lt;br /&gt;As mentioned, the document recommends SQL Server 2008 R2 for BizTalk 2010 and if you want BAM functionality, you need to install SQL Server Notification services. It recommends you install 3 components that form SQL Server 2005 Notifications that can be downloaded from MSDN, they are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Microsoft SQL Server Native Client (sqlncli_x64.msi)&lt;/li&gt;&lt;li&gt;Microsoft SQL Server 2005 Management Objects Collection (SQLServer_XMO_x64.msi)&lt;/li&gt;&lt;li&gt;Microsoft SQL Server Notification Services Client Components (SQLServer2005_NS_x64.msi)&lt;/li&gt;&lt;/ol&gt;So this all seems very straight forward. After installing the above components I was still getting the same error when attempting to configure BAM.&lt;br /&gt;&lt;br /&gt;If we have a closer look at the error message, notice the program that is generating the error: &lt;span style="font-weight: bold;"&gt;C:\Program Files (x86)\Microsoft BizTalk Server 2010\Tracking\bm.exe&lt;/span&gt;. Also notice the assembly and assembly version bm.exe is looking for: &lt;span style="font-weight: bold;"&gt;Microsoft.SqlServer.Instapi, Version=9.0.242.0. &lt;/span&gt;So I looked for this dependency in the current folder (where bm is running) and couldn't see it. So it will either be on the PATH or in the GAC. Not running any tools to figure out the location where the CLR was looking (I'm lazy!), I looked in the GAC and noticed the file &lt;span style="font-weight: bold;"&gt;Microsoft.SqlServer.Instapi&lt;/span&gt; was present. But it wasn't the version &lt;span style="font-weight: bold;"&gt;9.0.242.0&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;bm.exe&lt;/span&gt; was looking for. In the registry was version &lt;span style="font-weight: bold;"&gt;10.0.0.0&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So the first thing I thought I'd try was to force the loading of the version &lt;span style="font-weight: bold;"&gt;10.0.0.0&lt;/span&gt; assembly instead of the version &lt;span style="font-weight: bold;"&gt;9.0.242.0&lt;/span&gt; version it was looking for. As bm.exe is managed code, I could create a probe that forced the load of version &lt;span style="font-weight: bold;"&gt;10.0.0.0&lt;/span&gt; by adding this to the &lt;span style="font-weight: bold;"&gt;bm.exe.config&lt;/span&gt; file. After doing this, on start up of the &lt;span style="font-weight: bold;"&gt;bm.exe&lt;/span&gt;, it overwrites the config file! so this change was completely useless. So then I thought I could add this probe to the &lt;span style="font-weight: bold;"&gt;machine.config&lt;/span&gt; file but thought this is getting very silly now.&lt;br /&gt;&lt;br /&gt;The next thing I turned to my helpful friend, Google. searching hi and low for a solution to this the only concrete  thing I could find was this post on the Microsoft Social forums:  &lt;a href="http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/e85cbf20-4a81-4059-88a9-6666bfeb02dc"&gt;http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/e85cbf20-4a81-4059-88a9-6666bfeb02dc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A response from James K. Howey in the above post from Microsoft suggests its an issue with the SQL Server 2005 Management Objects Collection and this issue might be fixed in Sp2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;"I have reproduced this issue in house and can confirm that this is a problem with the Microsoft SQL Server 2005 Management Objects Collection. We will consider this issue for inclusion in Service Pack 2."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;James also mentions that he tried GAC'ing the version 9 assembly but this failed with different error suggesting that the managed assembly is in fact a wrapper around something else or perhaps has other dependencies.&lt;br /&gt;&lt;br /&gt;This was getting very messy, and all I wanted was for the BAM Portal to work - surely this is not much to ask! should it really be this hard...&lt;br /&gt;&lt;br /&gt;So the next thing I thought was it seems BizTalk 2010 is designed to talk to SQL Server 2005 but recommends SQL Server 2008 R2. But there seems to be low-level dependencies it requires from the older SQL version. I didn't want to have to install the fully blown SQL Server 2005 on this machine so instead installed Notification Services from the fully blown SQL Server 2005 ISO.&lt;br /&gt;&lt;br /&gt;After this I noticed the assembly &lt;span style="font-weight: bold;"&gt;Microsoft.SqlServer.Instapi version 9.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;0.242.0&lt;/span&gt; in the GAC!!! Feeling rather upbeat, I re-executed the BAM Tools configuration (bm.exe) and it worked!:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-7W6yrzvnfoM/TWV1FMjXmJI/AAAAAAAAAfM/YerFRasuLuM/s1600/Successful%2BBAM%2BPortal%2Bconfiguration.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 343px;" src="http://3.bp.blogspot.com/-7W6yrzvnfoM/TWV1FMjXmJI/AAAAAAAAAfM/YerFRasuLuM/s400/Successful%2BBAM%2BPortal%2Bconfiguration.png" alt="" id="BLOGGER_PHOTO_ID_5576992445697595538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you want BAM functionality in your BizTalk 2010 environment, do not install the Notification Services MSI's referenced in the BizTalk 2010 install guide, instead install from the fully blown SQL Server 2005 ISO from MSDN Subscriptions.&lt;br /&gt;&lt;br /&gt;Happy BizTalk'in!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6233878470545948912?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6233878470545948912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6233878470545948912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6233878470545948912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6233878470545948912'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2011/02/microsoft-notification-services-control.html' title='Microsoft Notification Services Control Utility 9.0.242.0 Could not load file or assembly &apos;Microsoft.SqlServer.Instapi, Version=9.0.242.0'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ZYIr6rGLWEU/TWViog_Ig_I/AAAAAAAAAe8/cbNEEy5iMVU/s72-c/Configuring%2BBAM%2Btools%2Bfailure.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-116179468818380435</id><published>2010-12-30T19:30:00.006Z</published><updated>2010-12-30T20:28:36.375Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>Free PostSharp licence courtesy of Gael Fraiteur up for grabs</title><content type='html'>It seems I can't give away free licences for software these days!!&lt;br /&gt;&lt;br /&gt;I have a free "legit" licence of &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;PostSharp&lt;/span&gt; that Gael &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;Fraiteur&lt;/span&gt; of &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;SharpCrafters&lt;/span&gt; gave to me to give to a friend. But after offering it around nobody seems to want it, so the first person to leave a comment can have it!&lt;br /&gt;&lt;br /&gt;&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;PostSharp&lt;/span&gt; is a framework that allows you to implement Aspect Oriented Programming (&lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;AOP&lt;/span&gt;) in your software code. &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;AOP&lt;/span&gt; allows a cleaner and simpler architecture by abstracting out your cross-cutting concerns. Cross-cutting concerns are the things that slice vertically across layers in your application such as logging, &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-corrected"&gt;instrumentation&lt;/span&gt;, caching etc.&lt;br /&gt;&lt;br /&gt;For some simple tutorials on &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;PostSharp&lt;/span&gt; see here: &lt;a href="http://www.sharpcrafters.com/postsharp/documentation/getting-started"&gt;http://www.sharpcrafters.com/postsharp/documentation/getting-started&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also check this out: &lt;a href="http://www.sharpcrafters.com/"&gt;http://www.sharpcrafters.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The really cool thing is with this tool is it supports Windows Phone 7, which is great as normally mobile platforms are not normally supported for advanced frameworks such as this. If I recall &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;PostSharp&lt;/span&gt; did support the .NET Compact Framework but only up to v2.0. Need to confirm this though.&lt;br /&gt;&lt;br /&gt;Thanks to Gael &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;Fraiteur&lt;/span&gt; for the free licences and keep up the good work!&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-116179468818380435?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/116179468818380435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=116179468818380435' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/116179468818380435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/116179468818380435'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/12/free-postsharp-licence-courtesy-of-gael.html' title='Free PostSharp licence courtesy of Gael Fraiteur up for grabs'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4061524638594774861</id><published>2010-11-16T21:38:00.005Z</published><updated>2010-11-16T21:43:17.544Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>Smart421</title><content type='html'>I have recently left Hitachi Consulting and joined a similar Microsoft and Oracle Gold Partner consultancy company named &lt;a href="http://www.smart421.com/"&gt;Smart421&lt;/a&gt; where I work as a Technical Architect in the Microsoft space.&lt;br /&gt;&lt;br /&gt;Smart421 offer Consultancy, Service Management, Data Management and Business Integration and is part of a larger public company called &lt;a href="http://www.kcomplc.com/"&gt;&lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;KCOM&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;p&gt;&lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;KCOM&lt;/span&gt; were originally a large telecommunication company but now they consist of: KC, eclipse, &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;KCOM&lt;/span&gt; and Smart421.&lt;/p&gt;&lt;p&gt;Smart421 specializes in complex enterprise integration projects but more recently full system design the implementation. We have a lot of expertise in &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;SOA&lt;/span&gt; Governance and &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;PCI&lt;/span&gt; &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;DSS&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;I form part of the Microsoft practice but we also have a fairly large Java practice with particular focus on IBM &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;WebSphere&lt;/span&gt;, &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;DataPower&lt;/span&gt; and many other IBM tools/technologies. Smart421 prides itself in Enterprise Architecture as we are active members of the Open Group and have many &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;TOGAF&lt;/span&gt; practitioners. &lt;/p&gt;&lt;p&gt;So far I'm liking it a lot as I get to be involved in lot of different things and hope soon to be a certified &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;TOGAF&lt;/span&gt; practitioner.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4061524638594774861?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4061524638594774861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4061524638594774861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4061524638594774861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4061524638594774861'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/11/smart421.html' title='Smart421'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1558512922077388200</id><published>2010-11-06T19:21:00.005Z</published><updated>2010-11-06T19:40:49.058Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Smartphone Essentials WP7 Article - not completely true...</title><content type='html'>I was in a local newsagent the other day waiting for my train and noticed a magazine "Smartphone Essentials" (UK magazine) as it had a spread on the newly released Windows Phone 7 device. I only had a couple of minutes, so I skipped to the Windows Phone 7 bits.&lt;br /&gt;&lt;br /&gt;I have to say the authors for this magazine need to do more research before they publish this stuff. Windows Phone 7 Series is not "Brand new from the ground up". The magazine was suggesting that WP7 is a completely new OS built from scratch. This is simply not true. When people read this, they generally assume 1 thing, it's brand new so it will be full of bugs and issues so I'm going to wait for v.NEXT.&lt;br /&gt;&lt;br /&gt;Windows Phone 7 series has a new shell and application framework that is fully managed code that sits on Windows CE 7 OS. Windows CE is the same OS used in Windows Mobile except in Windows Mobile the latest version used is Windows CE 5.2.&lt;br /&gt;&lt;br /&gt;The other thing that is not true was that fact they mentioned Windows Mobile is dead. Windows Mobile is still being sold and is still supported by Microsoft today. It will be renamed soon to Windows Embedded Handheld which is essentially still the same Windows Mobile shell OS.&lt;br /&gt;&lt;br /&gt;There is still a fairly large enterprise market with investments in Windows Mobile that are being used for mission critical applications today and will continue to do so. Windows Embeded Handheld will be geard towards business users. Some Windows Mobile devices such as the MC65 and ES400 will port over to the new OS.&lt;br /&gt;&lt;br /&gt;Smartphone Essentials: just because Windows Mobile is not competing too well against platforms such as Android and the iPhone in the consumer markets, doesn't make it a dead platform. There is another world out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1558512922077388200?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1558512922077388200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1558512922077388200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1558512922077388200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1558512922077388200'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/11/smartphone-essentials-wp7-article-not.html' title='Smartphone Essentials WP7 Article - not completely true...'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4853802537632368720</id><published>2010-11-05T21:24:00.009Z</published><updated>2010-11-05T21:45:57.222Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WCF Data Services'/><title type='text'>SELECT TOP (n) in Entity Framework or LINQ to SQL</title><content type='html'>I have recently inherited a project that makes use of &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;WCF&lt;/span&gt; Data Services with the Entity Framework being used as the &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;ORM&lt;/span&gt; to facilitate this with Microsoft &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;SQL&lt;/span&gt; Server 2008 R2.&lt;br /&gt;&lt;br /&gt;I had a requirement to only ever retrieve a maximum of 100 items no matter the query. In &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;SQL&lt;/span&gt; this is easy and can be achieved using the &lt;span style="font-family:courier new;"&gt;SELECT TOP (N)..&lt;/span&gt; syntax.&lt;br /&gt;&lt;br /&gt;Using a lambda expression to return a collection of &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;IQueryable&lt;/span&gt; objects can be achieved simply as the following:&lt;pre&gt;&lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;IQueryable&amp;lt;&lt;/span&gt;&lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;MyObject&lt;/span&gt;&amp;gt; &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;resultSet&lt;/span&gt; =&lt;br /&gt;service.MyObjects.Where(c =&amp;gt; c.Name.Contains(searchText))&lt;br /&gt;                    .&lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;OrderBy&lt;/span&gt;(x =&amp;gt; x.Name)&lt;br /&gt;                    .Take(100);&lt;/pre&gt;Remember here that the actual REST call is not made until you call &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;ToList&lt;/span&gt;() on the collection. This query simply creates the REST URL as a string.&lt;br /&gt;&lt;br /&gt;But using the extension method &lt;span style="font-family:courier new;"&gt;Take(n)&lt;/span&gt; will translate to &lt;span style="font-family:courier new;"&gt;TOP&lt;/span&gt; in &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;SQL&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4853802537632368720?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4853802537632368720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4853802537632368720' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4853802537632368720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4853802537632368720'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/11/select-top-n-in-entity-framework.html' title='SELECT TOP (n) in Entity Framework or LINQ to SQL'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5854023676063700104</id><published>2010-10-30T14:03:00.011Z</published><updated>2010-10-30T14:54:11.028Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Coding Challenge'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>Free Not For Resale MSDN Subscription up for grabs!!</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TMwrORC7hqI/AAAAAAAAAek/AbnahMODngs/s1600/MSDN.png"&gt;&lt;img style="WIDTH: 247px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5533845566225352354" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TMwrORC7hqI/AAAAAAAAAek/AbnahMODngs/s400/MSDN.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have in my possession a &lt;strong&gt;Not For Resale Visual Studio 2010 Ultimate with MSDN Subscription, &lt;/strong&gt;and it's up for grabs. Like all other Microsoft MVPs I had 3 to give away, I have given away 2 already but now I have just 1 left.&lt;br /&gt;&lt;br /&gt;So I can't think who to give it to as the two lucky people that received this free subscription were the only ones that I know of who wanted to get into programming or wanted to move to Visual Studio 2010 and the 2010 wave of Microsoft products. Most of the people I know receive Visual Studio 2010 as part of their corporate MSDN licence provided by the company they work for.&lt;br /&gt;&lt;br /&gt;I thought about who to give this to and I couldn't really think of anyone that I thought really derserves it. So instead I took an idea from what some other MVPs have been doing and that is to present a challenge to the community and the best or the right answer wins the MSDN subscription! That's fair don't you think...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;strong&gt;The Challenge&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;As I am passionate about Technical Architecture and good clean code and the fact I have done lots of code reviews in my career, I thought the challenge could be around best coding practice or the best example of clean maintainable easy to understand code.&lt;br /&gt;&lt;br /&gt;So the challenge is really: write an application for the new Windows Phone 7 Series device using the new free tools (Visual Studio 2010 Express with Windows Phone 7 Series) that promotes good architectural design.&lt;br /&gt;&lt;br /&gt;The things I'm looking for and this will greatly increase your chance of winning are as follows:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Good OO, pay attention to the single responsibility principle. No procedural code&lt;/li&gt;&lt;li&gt;Code must be maintainable&lt;/li&gt;&lt;li&gt;Easy to understand&lt;/li&gt;&lt;li&gt;Good system design patterns such as, command, MVVM, MVP, repository etc&lt;/li&gt;&lt;li&gt;Good code coverage (doesn't need to be 100%) but if used will make achieving 1, 2 and 3 on this list a lot more likely&lt;/li&gt;&lt;li&gt;You'll get extra marks if you make use of the IoC container I checked in to codeplex: &lt;a href="http://wp7.codeplex.com/"&gt;http://wp7.codeplex.com/&lt;/a&gt; - note that project is targeting the Beta tools of Windows Phone 7, I haven't got round to updating it yet but it should work with the RTM release of Windows phone&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;So..... the ultimate question you're probably asking is, what application should you write? well it doesn't matter. It could be an application as simple as a calculator to something that makes use of networking or Windows Azure for example. The person that wins this will be win it based on good architecture code design.&lt;/p&gt;&lt;p&gt;You've got until Tue 26th November to get something to me to review. Then I'll announce the winner before the end of November. The subscription does expire soon which is why I'm only giving about 3-4 weeks to do this.&lt;/p&gt;&lt;p&gt;Send submissions to simon (at) simonrhart (dot) com. If you have any questions then leave a comment on this post.&lt;/p&gt;&lt;p&gt;Happy coding!!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5854023676063700104?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5854023676063700104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5854023676063700104' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5854023676063700104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5854023676063700104'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/free-not-for-resale-msdn-subscription.html' title='Free Not For Resale MSDN Subscription up for grabs!!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7uh-qGrLw/TMwrORC7hqI/AAAAAAAAAek/AbnahMODngs/s72-c/MSDN.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2088580893636282050</id><published>2010-10-22T17:43:00.012Z</published><updated>2010-10-22T18:31:40.461Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>TFS 2010 Backup Power Tool - Grant Backup Plan Permission Failed</title><content type='html'>Now that &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/c255a1e4-04ba-4f68-8f4e-cd473d6b971f"&gt;TFS Power Tools&lt;/a&gt; has been released we can take advantage of the Team Foundation Server Backup feature that makes backing up TFS so much easier than it used to be.&lt;br /&gt;&lt;br /&gt;The TFS Power Tools contain tools client side too, it's just the backup feature is designed to actually run on the TFS server itself.&lt;br /&gt;&lt;br /&gt;It supports backing up not only all your collections but also your Reporting Server database (if using SQL Server Reporting Services integration) and your SharePoint databases if using MOSS for enhanced reporting. It works very much like the standard Windows Server Backup utility that is shipped with Windows Server 2008 R2.&lt;br /&gt;&lt;br /&gt;You have an option specify how many copies of the backup to keep. You have to backup to a network location. You can't backup to local disk like you can with Windows Server Backup. This tool is designed to worry about backing up TFS so you don't have to.&lt;br /&gt;&lt;br /&gt;The tool integrates with the Team Foundation Server Administration Console. So you create a backup plan from within there. You can specify when the backup should run i.e. daily, weekly, time of day etc. It can run under a domain or local account to.&lt;br /&gt;&lt;br /&gt;There are a few articles out there that step you through the process of setting this up so I'm not going to do it here. Instead I came across a nice "issue" with it when setting it up that I thought might save other people time as I burnt quite a bit of time on this. Here is a very good example of this: &lt;a href="http://myalmblog.com/2010/09/12/tfs-2010-power-tools-tfs-backup-and-restore-hands-on-lab/"&gt;http://myalmblog.com/2010/09/12/tfs-2010-power-tools-tfs-backup-and-restore-hands-on-lab/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So my issue was when getting to the end the readiness checks were failing with the &lt;strong&gt;Grant Backup Plan Permissions&lt;/strong&gt; step. Which was weird as I had write access to the UNC path to which the backup was writing. The other strange thing was I discovered a file in the UNC path after running this readiness check.&lt;br /&gt;&lt;br /&gt;After investigating further and looking at the log file (snip copied here) I figured out what was wrong:&lt;br /&gt;&lt;pre&gt;Error  @15:35:29.014] System.UnauthorizedAccessException: Access to the path '\\server\backup\TFSBackups\Tfs_Configuration_20101022163528.bak' is denied.&lt;br /&gt;   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)&lt;br /&gt;   at System.IO.File.Delete(String path)&lt;br /&gt;   at Microsoft.TeamFoundation.PowerTools.Admin.Helpers.BackupFactory.TestBackupCreation(String path)&lt;br /&gt;[Error  @15:35:29.060] !Verify Error!: Account DOMAIN\user failed to create backups using path \\server\backup\TFSBackups&lt;br /&gt;[Info   @15:35:29.060] "Verify: Grant Backup Plan Permissions\Root\VerifyDummyBackupCreation(VerifyTestBackupCreatedSuccessfully): Exiting Verification with state Completed and result Error"&lt;br /&gt;[Info   @15:35:29.060] !Verify Result!: 5 Completed, 0 Skipped: 4 Success, 1 Errors, 0 Warnings&lt;/pre&gt;Notice what it is doing yet!? It basically writes a file to the UNC path to check for write permissions - BUT not as the service account, it uses the current logged on user account (this is a bug I'm sure). But what is failing is actually the deletion of the file.&lt;br /&gt;&lt;br /&gt;Because of this the readiness checks fail and you can't continue. After looking at the permissions (or should I say IT looking at the permissions) it turns out I didn't have Delete permission for the current logged on user for that UNC path. Once setting the Delete permission to true, the problem went away and now I have a successful backup plan in place!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2088580893636282050?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2088580893636282050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2088580893636282050' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2088580893636282050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2088580893636282050'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/tfs-2010-backup-power-tool-grant-backup.html' title='TFS 2010 Backup Power Tool - Grant Backup Plan Permission Failed'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-349367919874470673</id><published>2010-10-19T19:19:00.005Z</published><updated>2010-10-19T19:49:44.878Z</updated><title type='text'>Power up failed (vrc=VERR_VMX_MSR_LOCKED_OR_DISABLED, rc=E_FAIL (0X80004005))</title><content type='html'>I recently tried to use &lt;a href="http://www.virtualbox.org/"&gt;&lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;VirtualBox&lt;/span&gt;&lt;/a&gt; to run a Virtual Machine on my new laptop which is a &lt;a href="http://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&amp;amp;cc=us&amp;amp;objectID=c01554252&amp;amp;prodTypeId=321957&amp;amp;prodSeriesId=3781677"&gt;HP &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;EliteBook&lt;/span&gt; 8530w&lt;/a&gt;. But after attempting to start the &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;VM&lt;/span&gt; I encountered the following error: &lt;strong&gt;Power up failed (&lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;vrc&lt;/span&gt;=&lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;VERR&lt;/span&gt;_&lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;VMX&lt;/span&gt;_&lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;MSR&lt;/span&gt;_LOCKED_OR_DISABLED, &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;rc&lt;/span&gt;=E_FAIL (0X80004005))&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So as per the return code, this is telling me that VT-x is either locked or not enabled. It can't be locked as this is running on Windows 7 which does not have any other &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;virtualizer&lt;/span&gt; running, i.e. &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;VirtualPC&lt;/span&gt; or Hyper-V. It is enabled as I explicitly set &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;virtualization&lt;/span&gt; in the BIOS. It turns out that I needed to also enable &lt;strong&gt;&lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;Txt&lt;/span&gt; Technology&lt;/strong&gt;. Once &lt;span id="SPELLING_ERROR_12" class="blsp-spelling-error"&gt;Txt&lt;/span&gt; Technology was enabled, the &lt;span id="SPELLING_ERROR_13" class="blsp-spelling-error"&gt;VM&lt;/span&gt; fire-up! nice&lt;br /&gt;&lt;br /&gt;I am not normally a &lt;span id="SPELLING_ERROR_14" class="blsp-spelling-error"&gt;VM&lt;/span&gt; person, but my new laptop is a beast. 8&lt;span id="SPELLING_ERROR_15" class="blsp-spelling-error"&gt;Gb&lt;/span&gt; of RAM so I can allocate 4&lt;span id="SPELLING_ERROR_16" class="blsp-spelling-error"&gt;Gb&lt;/span&gt; to the &lt;span id="SPELLING_ERROR_17" class="blsp-spelling-error"&gt;VM&lt;/span&gt; and it runs like a host OS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-349367919874470673?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/349367919874470673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=349367919874470673' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/349367919874470673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/349367919874470673'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/power-up-failed-vrcverrvmxmsrlockedordi.html' title='Power up failed (vrc=VERR_VMX_MSR_LOCKED_OR_DISABLED, rc=E_FAIL (0X80004005))'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3138074261710672064</id><published>2010-10-18T20:36:00.003Z</published><updated>2010-10-18T20:42:21.919Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>The File AssemblyInfo.Cs could not be found within the project templates. Continuing to run, but the resulting project may not build properly.</title><content type='html'>Today after installing Visual Studio 2010 on a fresh copy of Windows 7 Enterprise, I encountered the following error message whenever I tried to create a new project using any project template: &lt;strong&gt;The File &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;AssemblyInfo&lt;/span&gt;.Cs could not be found within the project templates. Continuing to run, but the resulting project may not build properly.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;I think this may be due to the fact I &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-corrected"&gt;accidentally&lt;/span&gt; installed a &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;pre&lt;/span&gt;-release version of &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;ReSharper&lt;/span&gt; 5.1 (I was &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-corrected"&gt;meant&lt;/span&gt; to install the &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;RTM&lt;/span&gt; version). Even after &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;uninstalling&lt;/span&gt; &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;ReSharper&lt;/span&gt; the problem did not go away.&lt;br /&gt;&lt;br /&gt;To fix the issue, I simply ran this trusty old command: &lt;strong&gt;&lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;devenv&lt;/span&gt;.&lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;exe&lt;/span&gt; /&lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;InstallVSTemplates&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Job done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3138074261710672064?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3138074261710672064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3138074261710672064' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3138074261710672064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3138074261710672064'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/file-assemblyinfocs-could-not-be-found.html' title='The File AssemblyInfo.Cs could not be found within the project templates. Continuing to run, but the resulting project may not build properly.'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8620732941281200163</id><published>2010-10-16T11:41:00.003Z</published><updated>2010-10-16T11:59:22.113Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><title type='text'>Arrow and Enter keys stop working in Visual Studio 2010</title><content type='html'>I found this issue with the &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;RTM&lt;/span&gt; of Visual Studio 2010 recently where the arrow keys and the Enter key do not work as expected. This is a show-stopper as you can't write any code, or rather you can, you just have to write everything on 1 line!&lt;br /&gt;&lt;br /&gt;I have 3 machines with VS 2010 installed. Each machine is fairly similar in configuration. I have only &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-corrected"&gt;encountered&lt;/span&gt; this issue with 1 of those 3 machines - which makes it very hard to diagnose.&lt;br /&gt;&lt;br /&gt;In my scenario I found the some of the arrow keys - the up key for example was acting like a tab within the code window. It would when pressed allow me to set focus on the combo box that contains classes the the current &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;namespace&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Other people have received this issue, but the work around for them is to simply close and reload VS. In my case this didn't work. I even &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;uninstalled&lt;/span&gt; all of the VS 2010 bits including the framework to no avail. This problem affected all &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;SKU's&lt;/span&gt; of Visual Studio 2010 (only 2010, 2008 worked fine for me).&lt;br /&gt;&lt;br /&gt;I should mention VS 2010 &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;RTM&lt;/span&gt; used to work on this troubled machine. It must of been something I installed or configuration I changed later. I tried rolling my machine back to when I think it was working, again to no avail.&lt;br /&gt;&lt;br /&gt;There is a bug report on Microsoft Connect here: &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/534869/arrow-keys-stop-working-in-editor?wa=wsignin1.0#tabs"&gt;https://connect.microsoft.com/VisualStudio/feedback/details/534869/arrow-keys-stop-working-in-editor?wa=wsignin1.0#tabs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So if you have experienced this, make sure you vote on the link above, or if you found a work around please leave a comment.&lt;br /&gt;&lt;br /&gt;This may of been due to the fact I installed RC and beta copies of VS - as I installed &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;pre&lt;/span&gt;-release copies of Windows Phone 7 developer tools. Then I installed the RM version of VS 2010 after &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;uninstalled&lt;/span&gt; the &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;pre&lt;/span&gt;-release versions as per the release notes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Conclusion.....&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I failed to figure out what was causing this. If I had the source code of course I could debug VS but as I don't, it was down to trial and error. I had no logging written to the event log. VS never crashed as a result of this, it is just a very annoying bug that I could not figure out what caused it.&lt;br /&gt;&lt;br /&gt;So in the end, I had to reinstall Windows, and now.....I have VS 2010 working again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8620732941281200163?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8620732941281200163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8620732941281200163' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8620732941281200163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8620732941281200163'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/arrow-and-enter-keys-stop-working-in.html' title='Arrow and Enter keys stop working in Visual Studio 2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2886181556331717007</id><published>2010-10-14T09:43:00.013Z</published><updated>2010-10-14T19:25:10.901Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><title type='text'>DiscoverServices : Failure in find service API calls : Can't find PInvoke DLL 'BTInterface.dll'.</title><content type='html'>I have been coding against the new Motorola MC65 and the Motorola ES400 - devices that will port onto the new &lt;a href="http://www.microsoft.com/windowsembedded/en-us/products/handheld/overview.mspx"&gt;Windows Embedded Handheld&lt;/a&gt; when released later this year.&lt;br /&gt;&lt;br /&gt;I was attempting to pair with an embedded bluetooth device using the EMDK v2.3 - an EMDK that has worked on previous Motorola devices such as the MC75.&lt;br /&gt;&lt;br /&gt;When attempting to pair using the &lt;span style="font-family:courier new;"&gt;Symbol.WPAN.Bluetooth.Bluetooth&lt;/span&gt; class, the device receives the pair message but then the EMDK throws ab Exception with message &lt;strong&gt;"DiscoverServices : Failure in find service API calls : Can't find PInvoke DLL 'BTInterface.dll'."&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The stack trace looks like this:&lt;br /&gt;&lt;pre&gt;   at ag.l(RemoteDevice A_0)&lt;br /&gt;   at ag.n(RemoteDevice A_0)&lt;br /&gt;   at ag.j(RemoteDevice A_0)&lt;br /&gt;   at Symbol.WPAN.Bluetooth.RemoteDevice.Pair(String AuthenticationPIN)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I can confirm, once upgrading to the latest version of the EMDK v2.4 fixes this issue (v2.04 of the Symbol.WPAN.dll assembly).&lt;br /&gt;&lt;br /&gt;You can download the EMDK v2.4 for .NET here: &lt;a href="http://support.symbol.com/support/search.do?cmd=displayKC&amp;amp;docType=kc&amp;amp;externalId=12874&amp;amp;sliceId=&amp;amp;dialogID=196190455&amp;amp;stateId=1%200%20196186434"&gt;http://support.symbol.com/support/search.do?cmd=displayKC&amp;amp;docType=kc&amp;amp;externalId=12874&amp;amp;sliceId=&amp;amp;dialogID=196190455&amp;amp;stateId=1%200%20196186434&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2886181556331717007?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2886181556331717007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2886181556331717007' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2886181556331717007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2886181556331717007'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/discoverservices-failure-in-find.html' title='DiscoverServices : Failure in find service API calls : Can&apos;t find PInvoke DLL &apos;BTInterface.dll&apos;.'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3616381622709082976</id><published>2010-10-01T15:01:00.002Z</published><updated>2010-10-01T15:18:30.185Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>Microsoft MVP Award 4th year in a row!</title><content type='html'>I have just received the 2010 Microsoft MVP Award in Device Application Development. This is my 4th MVP award in a row and it's an honour to be in the programme for another year.&lt;br /&gt;&lt;br /&gt;Thanks Microsoft!&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3616381622709082976?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3616381622709082976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3616381622709082976' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3616381622709082976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3616381622709082976'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/10/microsoft-mvp-award-4th-year-in-row.html' title='Microsoft MVP Award 4th year in a row!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-367613861954566358</id><published>2010-09-23T19:02:00.007Z</published><updated>2010-09-23T19:41:10.564Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><title type='text'>StyleCop for ReSharper</title><content type='html'>Last night the UK ALM user group was fantastic. I really enjoyed it and we had good discussions going. So thanks to &lt;a href="http://stuartpreston.net/blog/"&gt;Stuart Preston&lt;/a&gt; for setting it up and thanks to the speakers, Karel Deman from Avanade for a great talk and &lt;a href="http://howard.vanrooijen.co.uk/"&gt;Howard van Rooijen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Which leads me to why I started to write this post. Howard demoed a tool he built called &lt;a href="http://stylecop.forresharper.org/"&gt;StyleCop for Resharper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now if you've never heard of ReSharper - shame on you, then you can search my blog or the web for info on it. If you've never heard of StyleCop then again search the web or read this post that should give you a quick overview of what StyleCop is designed to address: &lt;a href="http://blogs.msdn.com/b/sourceanalysis/archive/2008/05/23/announcing-the-release-of-microsoft-source-analysis.aspx"&gt;http://blogs.msdn.com/b/sourceanalysis/archive/2008/05/23/announcing-the-release-of-microsoft-source-analysis.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just quickly; StyleCop is a code style analysis tool. It at compile time will inspect your code against a pre-determined set of rules to determine whether your code complies with your companies coding style implicitly. The problem with it is it only tells you what is wrong with your code when you compile. And in order to get a list of "failures" you have to look at the warning tab in the 'Errors' window in Visual Studio.&lt;br /&gt;&lt;br /&gt;When you install StyleCop: &lt;a href="http://code.msdn.microsoft.com/sourceanalysis"&gt;http://code.msdn.microsoft.com/sourceanalysis&lt;/a&gt; you get the option to install MSBuild targets that you can call during your automated build process. I haven't yet tried this but I will. As what you can do is fail the build if a developer has not complied to your companies codeing style.&lt;br /&gt;&lt;br /&gt;Don't confuse StyleCop with FxCop or (Code Analysis) they are very different. Code Analysis inspects your assemblies post compilation for good practices in terms of how you have built your solution, i.e. implementing IDisposable when consumed types support it. Proper use of localization and best practice use of the .NET class libraries.&lt;br /&gt;&lt;br /&gt;StyleCop for ReSharper is a ReSharper plugin (yes ReSharper supports plugins even though ReSharper is itself a VS plugin). What it does is it works like ReSharper, so as you type, it will inspect your code and tell you whether you are breaching StyleCop rules for that project. And as per ReSharper style, of hitting Alt+Enter, it gives you corrective options to fix your code for you!&lt;br /&gt;&lt;br /&gt;I like it alot. I think it really is a great tool. Combined with the StyleCop build targets I think this can work well in a team environment. As to configuring your projects for StyleCop use, StyleCop creates a file in each project directory that it reads. It doesn't work like Code Analysis, where the settings are baked into the .proj file. So I'm thinking maybe include that file in Source Control so each dev machine doesn't have to configure their machine everytime a new environment is spun up or a new project is added to the solution.&lt;br /&gt;&lt;br /&gt;Check it out here: &lt;a href="http://stylecop.forresharper.org/"&gt;http://stylecop.forresharper.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-367613861954566358?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/367613861954566358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=367613861954566358' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/367613861954566358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/367613861954566358'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/09/stylecop-for-resharper.html' title='StyleCop for ReSharper'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6104248266020120578</id><published>2010-09-21T21:08:00.002Z</published><updated>2010-09-21T21:13:11.832Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ALM'/><category scheme='http://www.blogger.com/atom/ns#' term='User group'/><title type='text'>UK ALM User group</title><content type='html'>We Hitachi Consulting are hosting the next UK ALM user group at 2 More London (London Bridge) tomorrow night 22nd September.&lt;br /&gt;&lt;br /&gt;Now I'm not sure if it is too late to register at this time, but the event brite registration page can be found here: http://ukalmug-september2010.eventbrite.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6104248266020120578?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6104248266020120578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6104248266020120578' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6104248266020120578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6104248266020120578'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/09/uk-alm-user-group.html' title='UK ALM User group'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4351134564869311695</id><published>2010-09-02T19:52:00.005Z</published><updated>2010-09-02T20:07:39.279Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>No need for server side clientaccesspolicy.xml when using Silverlight for Windows phone 7 Series</title><content type='html'>If you're a seasoned Silverlight developer you'll be well aware of having to incorporate the clientaccesspolicy.xml file in the root of your service domain with a method that returns the file as a Stream object. MSDN documentation that describes that and the documentation can be found here: &lt;a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Then you would typically define a method that looks like the following that is accessible via a RESful call (if using WCF) - note: the UriTemplate here is what is important:&lt;br /&gt;&lt;pre&gt;[OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]&lt;br /&gt;Stream GetClientAccessPolicy();&lt;/pre&gt;Executing any method from within a desktop Silverlight app whether in-browser or out-of-browser (SL 3 feature) will call that method above implicitly by the SL HTTP stack.&lt;br /&gt;&lt;br /&gt;When calling any web method from a Windows phone Silverlight application, the 'GetClientAccessPolicy' is not called so there is (currently no need for it if your clients are from WP7 apps).&lt;br /&gt;&lt;br /&gt;I'm not sure if this will change when the WP7 tools RTM on the 16th September - I will be the first to try!&lt;br /&gt;&lt;br /&gt;My colleague Anthony Cooper found this out, so thanks to him.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4351134564869311695?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4351134564869311695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4351134564869311695' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4351134564869311695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4351134564869311695'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/09/no-need-for-server-side.html' title='No need for server side clientaccesspolicy.xml when using Silverlight for Windows phone 7 Series'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4099754998020729075</id><published>2010-09-02T09:53:00.003Z</published><updated>2010-09-02T20:09:57.948Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Windows Phone 7 Series released to RTM</title><content type='html'>Just in case you haven't heard the news yet, yesterday Windows Phone 7 Series was released to RTM: &lt;a href="http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2010/09/01/windows-phone-7-released-to-manufacturing.aspx"&gt;http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2010/09/01/windows-phone-7-released-to-manufacturing.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Excellent work to the Windows Phone team!&lt;br /&gt;&lt;br /&gt;So now we wait for OEMs to produce some hardware...not long I'm sure.&lt;br /&gt;&lt;br /&gt;The tools RTM on 16th September: &lt;a href="http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/08/23/a-developer-s-roadmap-to-windows-phone-7-launch-timing.aspx"&gt;http://windowsteamblog.com/windows_phone/b/wpdev/archive/2010/08/23/a-developer-s-roadmap-to-windows-phone-7-launch-timing.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4099754998020729075?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4099754998020729075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4099754998020729075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4099754998020729075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4099754998020729075'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/09/windows-phone-7-series-released-to-rtm.html' title='Windows Phone 7 Series released to RTM'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8366109476881360789</id><published>2010-07-28T21:27:00.003Z</published><updated>2010-09-02T20:13:50.751Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Building your Windows Phone 7 Series apps using Team Foundation Server 2010</title><content type='html'>&lt;strong&gt;UPDATE:&lt;/strong&gt; There is a workaround to what I have said here. See this post - a really cool way to build WP7 targeting different WP7 builds: &lt;a href="http://justinangel.net/WindowsPhone7EmulatorAutomation#BlogPost=TFS2010WP7ContinuousIntegration"&gt;http://justinangel.net/WindowsPhone7EmulatorAutomation#BlogPost=TFS2010WP7ContinuousIntegration&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So the ultimate question is, how do I build my Windows Phone 7 Series apps on &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;TFS&lt;/span&gt; and perhaps run unit tests against a Windows phone 7 series emulator. The short answer is you can't, well that's not entirely true. You can build your Windows phone 7 series apps on &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;TFS&lt;/span&gt; so long as you install the developer tools on your build server.&lt;br /&gt;&lt;br /&gt;Bear in mind when you install the developer tools you will not only get all the required build targets and &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; framework for Windows phone 7 series but also a VS2010 &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-error"&gt;IDE&lt;/span&gt; as well. This will either be VS2010 Express edition if you don't already have VS2010 &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;RTM&lt;/span&gt; installed on your server, or the tools will integrate into VS2010 &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;RTM&lt;/span&gt; (if installed). Either way, you are going to get an &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;IDE&lt;/span&gt; on your build server.&lt;br /&gt;&lt;br /&gt;This might sound rather ugly and I have asked Microsoft for separation of the tools/framework etc from the &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;IDE&lt;/span&gt; so &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;ISVs&lt;/span&gt;/consultancies can be more flexible how they build their apps. But this is really not high on &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;Microsofts&lt;/span&gt; priority list right now. The reason is simple. These tools are targeted toward consumers, so the majority or at least what Microsoft would like is the majority of people building apps/games for Windows phone 7 series are individual programmers whether professional or &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;ameteur&lt;/span&gt; and not big companies. Long term this will change.&lt;br /&gt;&lt;br /&gt;Instead, the priority is to deliver a really quick and easy way to get up and running building &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; or &lt;span id="SPELLING_ERROR_12" class="blsp-spelling-error"&gt;XNA&lt;/span&gt; apps for Windows phone. And Microsoft has done this. Simply go to &lt;a href="http://developer.windowsphone.com/"&gt;http://developer.windowsphone.com/&lt;/a&gt; and you can download a single package, run it and this will set your machine up ready to build and ship apps on the Windows phone platform. No other downloads are required.&lt;br /&gt;&lt;br /&gt;The cool thing about this is, unlike Windows Mobile development, the tools are free. A great step forward.&lt;br /&gt;&lt;br /&gt;So to recap, in order for more professional programmers to build Windows phone apps using a sophisticated &lt;span id="SPELLING_ERROR_13" class="blsp-spelling-corrected"&gt;continuous&lt;/span&gt; integration &lt;span id="SPELLING_ERROR_14" class="blsp-spelling-error"&gt;yada&lt;/span&gt; &lt;span id="SPELLING_ERROR_15" class="blsp-spelling-error"&gt;yada&lt;/span&gt; solution, you need to install the tools on your build server, but you will get the &lt;span id="SPELLING_ERROR_16" class="blsp-spelling-error"&gt;IDE&lt;/span&gt; as well.&lt;br /&gt;&lt;br /&gt;I also mentioned unit testing. Currently the latest beta tools do not support unit testing on the emulator. Of course you can still write unit tests that execute on the desktop against your &lt;span id="SPELLING_ERROR_17" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; for Windows phone apps. I have a sample of this over at &lt;a href="http://wp7.codeplex.com/"&gt;http://wp7.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy coding!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8366109476881360789?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8366109476881360789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8366109476881360789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8366109476881360789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8366109476881360789'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/building-your-windows-phone-7-series.html' title='Building your Windows Phone 7 Series apps using Team Foundation Server 2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1437863218422336873</id><published>2010-07-26T06:56:00.005Z</published><updated>2010-07-26T15:06:21.427Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Codeplex'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Username and password format for TFS on codeplex</title><content type='html'>When you first setup a project on codeplex there is a popup that tells you what domain\username and password to use to connect to the TFS server.&lt;br /&gt;&lt;br /&gt;But I found after setting up a project I couldn't remember what the format should be.&lt;br /&gt;&lt;br /&gt;So this post is really for my benefit if nothing else, here it is:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Username:&lt;/strong&gt; snd\&amp;lt;username&amp;gt;&lt;username&gt;_cp&lt;br /&gt;&lt;strong&gt;Password:&lt;/strong&gt; &amp;lt;Codeplex password&amp;gt;&lt;codeplex&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1437863218422336873?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1437863218422336873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1437863218422336873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1437863218422336873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1437863218422336873'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/username-and-password-format-for-tfs-on.html' title='Username and password format for TFS on codeplex'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8447897092653928376</id><published>2010-07-25T20:04:00.011Z</published><updated>2010-07-25T21:49:05.768Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><title type='text'>I'm TestDriven.Net</title><content type='html'>Thanks to the chaps over at &lt;a href="http://testdriven.net/"&gt;http://testdriven.net/&lt;/a&gt; I got the opportunity to test their product.&lt;br /&gt;&lt;br /&gt;So, one of the real problems with Visual Studio when it comes to unit testing your code is it is really slow and unproductive.&lt;br /&gt;&lt;br /&gt;If I write a test method in C#, I often want to quickly run it and run it often as this is the whole point of TDD isn't it. If you use &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt; you'll probably find this is the slowest testing tool available but its great integration with &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;TFS&lt;/span&gt; often makes it a desirable choice.&lt;br /&gt;&lt;br /&gt;To quickly test our method we normally right click the method in code, and select "Run Tests". This will (if a &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt;) switch to the Test Results window and show you the result of the test, great. But...you'll find this quite slow. Then what if you want to debug a test. First you have to run the individual test as said above, then check the &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-corrected"&gt;check box&lt;/span&gt; and hit Debug Test.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEynlzbxVpI/AAAAAAAAAdc/EiwqqkGVGzY/s1600/testresult.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 219px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497953513016219282" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEynlzbxVpI/AAAAAAAAAdc/EiwqqkGVGzY/s400/testresult.png" /&gt;&lt;/a&gt;&lt;br /&gt;This is fine but all very time consuming, why can't I just say Debug this test without having to run it first, check the &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-corrected"&gt;check box&lt;/span&gt;, then hit Debug test.&lt;br /&gt;&lt;br /&gt;This is where &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net comes into play. Now after installing the tool, I have a new menu item when right clicking my test "&lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;CanResolveTransientComponent&lt;/span&gt;":&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEyonY-bquI/AAAAAAAAAdk/8zs_KIjx5lk/s1600/testpopup.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 213px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497954639785208546" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEyonY-bquI/AAAAAAAAAdk/8zs_KIjx5lk/s400/testpopup.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So here I can hit "Run Test(s)" and it will execute the test in a fraction of the time that Visual Studio will do it. When doing this, &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net will switch to the output window and show the test output:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEypYJTd9RI/AAAAAAAAAds/hdTNZqV9Y48/s1600/testresultoutput.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 164px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497955477392061714" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEypYJTd9RI/AAAAAAAAAds/hdTNZqV9Y48/s400/testresultoutput.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So 0.36 seconds is pretty fast. When running via Visual Studio it is much longer, perhaps around 2 seconds for the same test.&lt;br /&gt;&lt;br /&gt;The reason for this is when you execute via &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net, it omits &lt;span id="SPELLING_ERROR_9" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt; code coverage. This greatly speeds up the testing process. If and when you're interested in code coverage you can ask &lt;span id="SPELLING_ERROR_10" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net to give it to you.&lt;br /&gt;&lt;br /&gt;There is a &lt;span id="SPELLING_ERROR_11" class="blsp-spelling-error"&gt;submenu&lt;/span&gt; when you right click your test method:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEyr8-vN2TI/AAAAAAAAAd0/GggX7SL-09s/s1600/testwith.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 147px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497958309234071858" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TEyr8-vN2TI/AAAAAAAAAd0/GggX7SL-09s/s400/testwith.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I like this &lt;span id="SPELLING_ERROR_12" class="blsp-spelling-error"&gt;submenu&lt;/span&gt; &lt;span id="SPELLING_ERROR_13" class="blsp-spelling-error"&gt;alot&lt;/span&gt;. It gives great flexibility in how you run your tests. If you want to simply debug your test without have to go through the lengthy steps mentioned earlier, simply select "Debugger". Sweet.&lt;br /&gt;&lt;br /&gt;As mentioned earlier regarding code coverage. When quickly executing a test the &lt;span id="SPELLING_ERROR_14" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt; code coverage is omitted in order to speed up the test greatly. But if you want &lt;span id="SPELLING_ERROR_15" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt; code coverage then you can select "Coverage" from this handy &lt;span id="SPELLING_ERROR_16" class="blsp-spelling-error"&gt;submenu&lt;/span&gt;. This will give you pretty much the same results as if you ran the test via Visual Studio itself.&lt;br /&gt;&lt;br /&gt;As you can probably see, if you use another test tool other than &lt;span id="SPELLING_ERROR_17" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt;, there is integration for &lt;span id="SPELLING_ERROR_18" class="blsp-spelling-error"&gt;NCover&lt;/span&gt;. In fact &lt;span id="SPELLING_ERROR_19" class="blsp-spelling-error"&gt;NCover&lt;/span&gt; works for &lt;span id="SPELLING_ERROR_20" class="blsp-spelling-error"&gt;MSTest&lt;/span&gt; too. Selecting &lt;span id="SPELLING_ERROR_21" class="blsp-spelling-error"&gt;NCover&lt;/span&gt; from the &lt;span id="SPELLING_ERROR_22" class="blsp-spelling-error"&gt;submenu&lt;/span&gt; fires up the &lt;span id="SPELLING_ERROR_23" class="blsp-spelling-error"&gt;NCover&lt;/span&gt; Explorer tool that gives you a code coverage for the test(s) you have selected to run:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEyupOxp9AI/AAAAAAAAAd8/oOiHvlRb3A8/s1600/codecoverage.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 305px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497961268476769282" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEyupOxp9AI/AAAAAAAAAd8/oOiHvlRb3A8/s400/codecoverage.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a great feature, I do like this.&lt;br /&gt;&lt;br /&gt;Another really cool feature that I'd like to mention is support for performance testing. Selecting "Performance" from the &lt;span id="SPELLING_ERROR_24" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net &lt;span id="SPELLING_ERROR_25" class="blsp-spelling-error"&gt;submenu&lt;/span&gt; gives you a nice breakdown of performance data for your test:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEyvu3fmDpI/AAAAAAAAAeE/liW1qdFGI1o/s1600/performancetest.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 333px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5497962464817843858" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/TEyvu3fmDpI/AAAAAAAAAeE/liW1qdFGI1o/s400/performancetest.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are many more features to checkout with &lt;span id="SPELLING_ERROR_26" class="blsp-spelling-error"&gt;TestDriven&lt;/span&gt;.Net and I recommend you check them out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8447897092653928376?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8447897092653928376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8447897092653928376' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8447897092653928376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8447897092653928376'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/im-testdrivennet.html' title='I&apos;m TestDriven.Net'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7uh-qGrLw/TEynlzbxVpI/AAAAAAAAAdc/EiwqqkGVGzY/s72-c/testresult.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-981029483522637155</id><published>2010-07-18T21:49:00.006Z</published><updated>2010-07-18T22:18:57.532Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone 7 Extension Tools</title><content type='html'>I started porting some code from the Compact Framework over to &lt;span id="SPELLING_ERROR_0" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; for Windows Phone.&lt;br /&gt;&lt;br /&gt;I have created a project on &lt;span id="SPELLING_ERROR_1" class="blsp-spelling-error"&gt;codeplex&lt;/span&gt;: &lt;a href="http://wp7.codeplex.com/"&gt;http://wp7.codeplex.com/&lt;/a&gt;. The solution so far contains an &lt;span id="SPELLING_ERROR_2" class="blsp-spelling-error"&gt;IoC&lt;/span&gt; with support for &lt;span id="SPELLING_ERROR_3" class="blsp-spelling-corrected"&gt;implicit&lt;/span&gt; dependency injection - in fact this is a port from the Compact Container on the CF. It also contains a port of the Common Service &lt;span id="SPELLING_ERROR_4" class="blsp-spelling-error"&gt;Locator&lt;/span&gt; for the desktop by the p&amp;amp;p team at Microsoft.&lt;br /&gt;&lt;br /&gt;The project is designed to be a work in progress and I'll add stuff to it if I think it might be useful to others.&lt;br /&gt;&lt;br /&gt;I do plan over the next couple of days to add an event &lt;span id="SPELLING_ERROR_5" class="blsp-spelling-error"&gt;aggregator&lt;/span&gt; to the solution that will integrate with the container nicely to promote nice loosely coupled &lt;span id="SPELLING_ERROR_6" class="blsp-spelling-error"&gt;multicast&lt;/span&gt; event model in your &lt;span id="SPELLING_ERROR_7" class="blsp-spelling-error"&gt;Silverlight&lt;/span&gt; applications.&lt;br /&gt;&lt;br /&gt;I am also working on an API that allows communication with the Microsoft Azure Service Bus - much like you get on the desktop. I will checkin as soon as it is available.&lt;br /&gt;&lt;br /&gt;The current solution that is checked in is designed to be used with the &lt;span id="SPELLING_ERROR_8" class="blsp-spelling-corrected"&gt;latest&lt;/span&gt; release of Windows Phone developer tools beta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-981029483522637155?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/981029483522637155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=981029483522637155' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/981029483522637155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/981029483522637155'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/windows-phone-7-extension-tools.html' title='Windows Phone 7 Extension Tools'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8923293190250769149</id><published>2010-07-16T07:04:00.002Z</published><updated>2010-07-16T07:17:58.245Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Windows phone virtual live class - July 20th and July 22nd</title><content type='html'>Jump start your development of Windows Phone 7 applications by attending Windows Phone 7 JumpStart. This free virtual live class, comprised of four instructor-led 3 hour sessions, will guide you in developing applications for the Windows Phone 7 platform using Silverlight and XNA. Register today by visiting: &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032455932&amp;amp;EventCategory=2&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032455932&amp;amp;EventCategory=2&amp;amp;culture=en-US&amp;amp;CountryCode=US&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Course sessions:&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;July 20 – 8am: Session One: Getting Started with Microsoft Windows Phone and Silverlight&lt;br /&gt;July 20 – 1pm: Session Two: Programming Game Applications with XNA&lt;br /&gt;July 22 – 8am: Session Three: Programming Applications with Silverlight&lt;br /&gt;July 22 – 1pm: Session Four: Review and Wrap Up&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8923293190250769149?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8923293190250769149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8923293190250769149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8923293190250769149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8923293190250769149'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/windows-phone-virtual-live-class-july.html' title='Windows phone virtual live class - July 20th and July 22nd'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2063611639836319105</id><published>2010-07-14T21:01:00.018Z</published><updated>2010-07-14T21:57:41.003Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Pivot and Panorama support in Windows phone 7 beta</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://blogs.msdn.com/blogfiles/stephanc/WindowsLiveWriter/WindowsPhone7PivotControlsample_1043F/pivot-ctrl-layout_2.png"&gt;&lt;img style="width: 627px; height: 480px;" alt="" src="http://blogs.msdn.com/blogfiles/stephanc/WindowsLiveWriter/WindowsPhone7PivotControlsample_1043F/pivot-ctrl-layout_2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The title of this blog post is a little confusing (it was meant to be!) in that there is no support for the Pivot and Panorama controls in the latest bits of Windows phone dev tools. The controls pictured above are courtesy of &lt;a href="http://blogs.msdn.com/b/stephanc/archive/2010/05/09/windows-phone-7-pivot-control-sample.aspx"&gt;Stephane Crozatier&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Those controls are freely available on &lt;a href="http://phone.codeplex.com/"&gt;codeplex&lt;/a&gt; to download but were designed for the CTP bits of Windows phone. So as there were some breaking changes between the CTP and the recently released beta they won't work out of the box. But it very easy to fix.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Firstly you need to do delete the &lt;span style="font-family:courier new;"&gt;Microsoft.Phone.*&lt;/span&gt; references and add the &lt;span style="font-family:courier new;"&gt;Microsoft.Phone.dll&lt;/span&gt; to the project. All those additional dlls have been merged into &lt;span style="font-family:courier new;"&gt;Windows.Phone.dll&lt;/span&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_zq7uh-qGrLw/TD4orPKVUPI/AAAAAAAAAcs/MYY0ykENEgU/s1600/missingrefWP7.png"&gt;&lt;img style="width: 291px; height: 344px;" id="BLOGGER_PHOTO_ID_5493873318707941618" alt="" src="http://2.bp.blogspot.com/_zq7uh-qGrLw/TD4orPKVUPI/AAAAAAAAAcs/MYY0ykENEgU/s400/missingrefWP7.png" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;div&gt;Then you'll need to clean up the XAML namespaces. Luckily for me I have &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper 5.0&lt;/a&gt; installed and all I have to do is press Alt+Enter and it fixes all my problems! nice&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/TD4qgi4JZyI/AAAAAAAAAdE/VN9Ep7LcbEE/s1600/wp7xamlreferences.png"&gt;&lt;img style="width: 400px; height: 230px;" id="BLOGGER_PHOTO_ID_5493875334045067042" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/TD4qgi4JZyI/AAAAAAAAAdE/VN9Ep7LcbEE/s400/wp7xamlreferences.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now if you want the sample WeatherForecast app to run you need to do 1 last thing. That is the &lt;span style="font-family:courier new;"&gt;ApplicationBarIconButton&lt;/span&gt; class now has a mandatory &lt;span style="font-family:courier new;"&gt;Text&lt;/span&gt; property so you need to set this property for each of the buttons in the MainPage.xaml file.&lt;br /&gt;&lt;p&gt;Now once I clean up all that XAML, I rebuild and run and I get...&lt;/p&gt;&lt;a href="http://1.bp.blogspot.com/_zq7uh-qGrLw/TD4u5-SVrMI/AAAAAAAAAdU/K-K6RWZMk3I/s1600/weather.png"&gt;&lt;img style="width: 213px; height: 400px;" id="BLOGGER_PHOTO_ID_5493880168945921218" alt="" src="http://1.bp.blogspot.com/_zq7uh-qGrLw/TD4u5-SVrMI/AAAAAAAAAdU/K-K6RWZMk3I/s400/weather.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Sweeet....&lt;br /&gt;&lt;br /&gt;Another nice cool thing with this emulator over the older Windows Mobile emulators is that you can do a ALT+Prnt Scrn to get a copy of the current focused window. You can't do this on Windows Mobile emulators.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2063611639836319105?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2063611639836319105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2063611639836319105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2063611639836319105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2063611639836319105'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/pivot-and-panorama-support-in-windows.html' title='Pivot and Panorama support in Windows phone 7 beta'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zq7uh-qGrLw/TD4orPKVUPI/AAAAAAAAAcs/MYY0ykENEgU/s72-c/missingrefWP7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6096831454120506223</id><published>2010-07-14T20:36:00.003Z</published><updated>2010-07-14T20:42:55.168Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows phone UK User group</title><content type='html'>&lt;a href="http://pocketnow.com/html/portal/news/0000009947//ILoveWindowsPhoneWallpaper_thumb.png"&gt;&lt;img style="WIDTH: 564px; HEIGHT: 319px; CURSOR: hand" border="0" alt="" src="http://pocketnow.com/html/portal/news/0000009947//ILoveWindowsPhoneWallpaper_thumb.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I just learn't there has recently been a Windows phone 7 UK user group setup. The first meeting is 28th July at Conchangos offices in London. &lt;a href="http://wpug.net/"&gt;http://wpug.net/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Microsofts Paul Foster and Rob Fonseca-Ensor will be speaking. There is now a wait list on the event but worth a try right!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6096831454120506223?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6096831454120506223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6096831454120506223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6096831454120506223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6096831454120506223'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/windows-phone-uk-user-group.html' title='Windows phone UK User group'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-533168251222867390</id><published>2010-07-12T21:57:00.009Z</published><updated>2010-07-12T22:18:23.431Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>First impressions Windows Phone Developer Tools beta</title><content type='html'>I just installed the beta bits released this evening and as per the CTP the install experience is brilliant. Except with the beta the greatest thing is support for Visual Studio RTM. So unlike the CTP, even if you had VS RTM installed, then you installed the WP7 dev tools, the installer would install the CTP of VS express and not integrate with VS RTM. Actually I found a whole bunch of errors when attempting this with the CTP. &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;New project in VS 2010 RTM (no support for VB.NET though):&lt;/div&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TDuTL7ROd1I/AAAAAAAAAck/39k0B3IMl0k/s1600/newproject.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 244px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5493146003606239058" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TDuTL7ROd1I/AAAAAAAAAck/39k0B3IMl0k/s400/newproject.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;However this build is good. I'm running VS 2010 Ultimate and VS 2008 Team Suite and this build integrated with VS 2010 RTM nicely.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;It is also worth noting in this release of WP7 dev tools, you get Expression Blend 4 for Windows Phone beta. In the CTP you had to download this separately.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;So experience so far is great, well done Windows Phone 7 team.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Emulator running bing:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_zq7uh-qGrLw/TDuSptFxJBI/AAAAAAAAAcc/opGR7v6HM_U/s1600/wp7em.png"&gt;&lt;img style="WIDTH: 213px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5493145415684531218" border="0" alt="" src="http://1.bp.blogspot.com/_zq7uh-qGrLw/TDuSptFxJBI/AAAAAAAAAcc/opGR7v6HM_U/s400/wp7em.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I'll post my experiences of actually writing WP7 code using these bits in later posts. In the mean time you can download and try for yourself.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-533168251222867390?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/533168251222867390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=533168251222867390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/533168251222867390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/533168251222867390'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/first-impressions-winodws-phone.html' title='First impressions Windows Phone Developer Tools beta'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7uh-qGrLw/TDuTL7ROd1I/AAAAAAAAAck/39k0B3IMl0k/s72-c/newproject.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6903100124173440826</id><published>2010-07-12T19:16:00.002Z</published><updated>2010-07-12T19:20:52.662Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone Developer Tools Beta is here</title><content type='html'>Announced today at WPC. Get it from: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c8496c2a-54d9-4b11-9491-a1bfaf32f2e3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c8496c2a-54d9-4b11-9491-a1bfaf32f2e3&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Check out this post on breaking changes from CTP to Beta: &lt;a href="http://blogs.msdn.com/b/jaimer/archive/2010/06/28/migrating-apps-from-windows-phone-ctps-to-the-beta-build.aspx?wa=wsignin1.0"&gt;http://blogs.msdn.com/b/jaimer/archive/2010/06/28/migrating-apps-from-windows-phone-ctps-to-the-beta-build.aspx?wa=wsignin1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll post my feedback once I've installed it and tried it out.&lt;br /&gt;&lt;br /&gt;Notice this under "System Requirements:"&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;This Beta of the Windows Phone Developer Tools is compatible with the final version of Visual Studio 2010&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This has made my day :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6903100124173440826?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6903100124173440826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6903100124173440826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6903100124173440826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6903100124173440826'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/windows-phone-developer-tools-beta-is.html' title='Windows Phone Developer Tools Beta is here'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4659202148952081985</id><published>2010-07-02T09:48:00.024Z</published><updated>2010-07-02T16:38:07.790Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='Mocking'/><title type='text'>Testing Motorola EMDK WLAN implementation on the desktop</title><content type='html'>I've been writing about testing recently and whether or not to use device test projects or desktop test projects. You can read my view on this in a previous blog post.&lt;br /&gt;&lt;br /&gt;No doubt if you have written code for any of the Motorola rugged devices (or other rugged OEM devices) you might have encountered the EMDK WLAN class (or similar if not coding against the EMDK) - which wraps the low-level mobile specific Motorola Fusion API. This is a prime example of why you should use a desktop test project rather than device project. Hang on, you just said the Fusion API can only execute on the device, so don't we need a device test project? No. The reason is simple, again if you have a continuous integration, automated build process setup, your tests will be executing on the build server so you won't be able to execute those tests against a real Motorola device. If you have a device test project, the best you can do is execute those tests on the Windows Mobile emulator - but what will this prove? In this case this is really no different in terms of a test problem than executing them on the desktop.&lt;br /&gt;&lt;br /&gt;So this is a reason to write your WLAN tests within a desktop test project. Let me demonstrate...&lt;br /&gt;&lt;br /&gt;The WLAN class that comes with the EMDK (Symbol.Fusion.WLAN.WLAN) is a prime example, to make things worst, it doesn't implement an interface, take a look:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/TC3zDXIXtsI/AAAAAAAAAcM/fEXo-6PDrjY/s1600/wlan.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 281px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5489310759908783810" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/TC3zDXIXtsI/AAAAAAAAAcM/fEXo-6PDrjY/s400/wlan.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So this makes it almost impossible to test. Instead how I have overcome this problem is to write an adapter that wraps the WLAN class, then mock out the adapter using Rhino Mocks. Observe the following WLAN implementation, the interface isn't important:&lt;pre&gt;public class MotorolaMC75WLAN : IWLANService&lt;br /&gt;{&lt;br /&gt;    private readonly IMotorolaWLANAdapter _adapter;&lt;br /&gt;    private bool _disposed;&lt;br /&gt;&lt;br /&gt;    public MotorolaMC75WLAN(IMotorolaWLANAdapter adapter)&lt;br /&gt;    {&lt;br /&gt;       _adapter = adapter;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public void Enable()&lt;br /&gt;    {&lt;br /&gt;       if (!_adapter.IsEnabled)&lt;br /&gt;       {&lt;br /&gt;         _adapter.Enable();&lt;br /&gt;         _adapter.PowerStatusChanged += OnPowerStatusChanged;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void OnPowerStatusChanged(object sender, PowerStatusChangedEventArgs e)&lt;br /&gt;    {&lt;br /&gt;       //raise events to interested parties....perhaps using some sort of event aggregator&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void Disable()&lt;br /&gt;    {&lt;br /&gt;       if (_adapter.IsEnabled)&lt;br /&gt;       {&lt;br /&gt;          _adapter.Disable();&lt;br /&gt;          _adapter.PowerStatusChanged -= OnPowerStatusChanged;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool IsEnabled&lt;br /&gt;    {&lt;br /&gt;       get { return _adapter.IsEnabled; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void RenewDHCP()&lt;br /&gt;    {&lt;br /&gt;       _adapter.RenewDHCP();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void Connect()&lt;br /&gt;    {&lt;br /&gt;       _adapter.Connect();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    #region IDisposable Members&lt;br /&gt;&lt;br /&gt;    public void Dispose()&lt;br /&gt;    {&lt;br /&gt;       Dispose(true);&lt;br /&gt;       GC.SuppressFinalize(this);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    private void Dispose(bool disposing)&lt;br /&gt;    {&lt;br /&gt;       if (!_disposed)&lt;br /&gt;       {&lt;br /&gt;          if (disposing)&lt;br /&gt;          {&lt;br /&gt;             Disable();&lt;br /&gt;             _adapter.Dispose();&lt;br /&gt;          }&lt;br /&gt;          _disposed = true;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;So that is our high level implementation that can be easily extended and contains no low-level mobile code. The adapter in this case is injected and can be anything we want it to be which allows us to test this class easily on the desktop.&lt;br /&gt;&lt;br /&gt;The next thing is our actual adapter. The interface for the adapter looks like this&lt;pre&gt;public interface IMotorolaWLANAdapter : IDisposable&lt;br /&gt;{&lt;br /&gt;    void Enable();&lt;br /&gt;&lt;br /&gt;    void Disable();&lt;br /&gt;&lt;br /&gt;    bool IsEnabled { get; }&lt;br /&gt;&lt;br /&gt;    void RenewDHCP();&lt;br /&gt;&lt;br /&gt;    event EventHandler&lt;powerstatuschangedeventargs&gt; PowerStatusChanged;&lt;br /&gt;&lt;br /&gt;    void Connect();&lt;br /&gt;}&lt;/pre&gt;The implementation is low-level that talks directly to the WLAN class (Fusion API). I'm not going to include a typical implementation for this but an example Enable() method might look like the following:&lt;br /&gt;&lt;pre&gt;public void Enable()&lt;br /&gt;{&lt;br /&gt;    if (IsEnabled)&lt;br /&gt;       return;&lt;br /&gt;&lt;br /&gt;    Symbol.Fusion.WLAN.WLAN command = null;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;       command = new Symbol.Fusion.WLAN.WLAN(FusionAccessType.COMMAND_MODE);&lt;br /&gt;       command.Adapters[0].PowerState = Adapter.PowerStates.ON;&lt;br /&gt;    }&lt;br /&gt;    catch (OperationFailureException ex)&lt;br /&gt;    {&lt;br /&gt;       //do something...&lt;br /&gt;    }&lt;br /&gt;    finally&lt;br /&gt;    {&lt;br /&gt;       if (command != null)&lt;br /&gt;          command.Dispose();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;It simply enables the first adapter it can find. Non-of the real adapter is testable.&lt;br /&gt;&lt;br /&gt;So if this were a device test project, we'd have to mock out the adapter by hand, then pass it in to the constructor to the MotorolaMC75WLAN class. But as we have decided to use a desktop test project we can use any mocking framework that we choose which enables us free of having to do the laborious hand mocking work.&lt;br /&gt;&lt;br /&gt;You can download Rhino Mocks from here if you don't already have it: &lt;a href="http://www.ayende.com/projects/rhino-mocks/downloads.aspx"&gt;http://www.ayende.com/projects/rhino-mocks/downloads.aspx&lt;/a&gt;. Download the zip and extract it somewhere on your hard disk, then add a reference the Rhino Mocks assembly in your test project - there is only one dll you need to reference.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TC4MluPIllI/AAAAAAAAAcU/MuhzphwvhLI/s1600/rhinomocks.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 339px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5489338838017414738" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TC4MluPIllI/AAAAAAAAAcU/MuhzphwvhLI/s400/rhinomocks.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Add a &lt;pre&gt;using Rhino.Mocks;&lt;/pre&gt;to your test class. Now if you wanted to mock out the adapter Enable method, in Rhino Mocks world it could look like the following using the newer triple A syntax:&lt;pre&gt;[TestMethod]&lt;br /&gt;public void ShouldEnableWLAN()&lt;br /&gt;{&lt;br /&gt;    IMotorolaWLANAdapter _mockWLANAdapter = MockRepository.GenerateMock&amp;lt;IMotorolaWLANAdapter&amp;gt;();&lt;br /&gt;    IWLANService _wlan = new MotorolaMC75WLAN(_mockWLANAdapter);&lt;br /&gt;&lt;br /&gt;    _mockWLANAdapter&lt;br /&gt;      .Expect(x =&amp;gt; x.Enable())&lt;br /&gt;      .Repeat.Once();&lt;br /&gt;&lt;br /&gt;    _wlan.Enable();&lt;br /&gt;&lt;br /&gt;    _mockWLANAdapter.VerifyAllExpectations();&lt;br /&gt;}&lt;/pre&gt;So the only actual thing we are testing here is the real MC75 WLAN class and not the adapter. The code is fairly easy to read. We are simply telling Rhino Mocks to expect exactly 1 call to Enable() when _wlan.Enable() is called. The thing to bear in mind here is to ensure your actual adapter doesn't contain bugs as we can't automate those tests on the build server.&lt;br /&gt;&lt;br /&gt;There you have it, a true mocking framework put at use in the mobile space.&lt;br /&gt;&lt;br /&gt;If you want to learn more about mocking frameworks, use Google, there are millions of articles out there on the subject.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4659202148952081985?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4659202148952081985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4659202148952081985' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4659202148952081985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4659202148952081985'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/testing-motorola-emdk-wlan.html' title='Testing Motorola EMDK WLAN implementation on the desktop'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zq7uh-qGrLw/TC3zDXIXtsI/AAAAAAAAAcM/fEXo-6PDrjY/s72-c/wlan.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-9049485227027941343</id><published>2010-07-01T13:15:00.003Z</published><updated>2010-07-01T14:23:12.847Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><title type='text'>Automated testing considerations for enterprise Windows Mobile projects - avoid a world of pain</title><content type='html'>I know in the past I have written blog posts on how to create unit tests that are actually executed on the Windows Mobile emulator which is great if you have mobile specific tests. But to be honest, when you are building large scale enterprise mobile solutions targeting a range of different devices i.e. Motorola, Casio, Intermec etc. Writing device specific platform tests for all these devices becomes quite hard to automate when using an application lifecyle management solution such as Visual Studio and TFS with its continuous integration and automated test execution support.&lt;br /&gt;&lt;br /&gt;Even if you only support one type of device, when you do enterprise mobile development, using the tools mentioned above, you're not going to be able to automate those tests as part of a nightly build or even a CI build. As you will no doubt be using the vanilla Windows Mobile Emulators that know nothing about such specifics that you might be testing such as barcode reader, credit card reader, bluetooth stack etc. Instead you would normally write adapters or mock out implementation code when testing your barcode implementation. You'll generally never write an actual test that calls the true native code on that platform, why would you anyway unless it's part of an integration test. Ensuring you do this allows you to write unit tests, integration tests that do run as part of your nightly and CI builds that do improve code quality.&lt;br /&gt;&lt;br /&gt;So what type of tests should you write for most of your code base, device or desktop? My advice is desktop even if you think your device project is small, there will come a time when your project becomes large and more complex. The benefit to targeting the desktop is the ability to use mocking frameworks. We tend to use Rhino Mocks and today there are 0 mocking frameworks available on the CF. If you start to go down to road of writing your own mocks, then you're entering a world of pain. When you think of it, most code can be tested on the desktop anyway. For things like data access, if you use SQL CE 3.5, then this can run on the desktop. For the features that require explicit device testing, then create a single device test project for this purpose and exclude it from the build definition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-9049485227027941343?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/9049485227027941343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=9049485227027941343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/9049485227027941343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/9049485227027941343'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/07/automated-testing-considerations-for.html' title='Automated testing considerations for enterprise Windows Mobile projects - avoid a world of pain'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-785882115987361119</id><published>2010-06-30T09:06:00.003Z</published><updated>2010-06-30T09:26:42.784Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Versioning team builds to match assembly version numbers</title><content type='html'>Have you ever wanted to version your team builds to match your assembly versions. Stuart Preston shows how to easily achieve this in Team Build 2010 over at: &lt;a href="http://stuartpreston.net/blog/2010/05/02/simple-assembly-versioning-with-team-build-2010/"&gt;http://stuartpreston.net/blog/2010/05/02/simple-assembly-versioning-with-team-build-2010/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've just tried this and it works nicely, great stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-785882115987361119?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/785882115987361119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=785882115987361119' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/785882115987361119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/785882115987361119'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/06/versioning-team-builds-to-match.html' title='Versioning team builds to match assembly version numbers'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1013069793459935198</id><published>2010-06-28T21:40:00.004Z</published><updated>2010-06-28T22:09:17.581Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Automating your Windows Mobile 6.x builds on TFS 2010</title><content type='html'>If you have recently attempted to build your Windows Mobile 6.x code using the new TFS 2010 recently you might have received this error:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;(81): The imported project "C:\Windows\Microsoft.NET\Framework64\v3.5\Microsoft.CompactFramework.CSharp.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It is pretty clear as to what the issue is, so how do you fix this? Well you can install Visual Studio 2008 (Device development is not supported on VS 2010) on your build server - not nice, but then this won't fix my issue here. Notice the path above. The smart device project is looking in the 64-bit location for the Compact Framework build targets files: &lt;strong&gt;C:\Windows\Microsoft.NET\Framework64&lt;/strong&gt;. As my build server is running on Windows Server 2008 R2 - which only comes in 64-bit edition, it makes sense to use 64-bit tools.&lt;br /&gt;&lt;br /&gt;The easy fix for this type of configuration is to install the .NET Compact Framework 3.5 Redistributable which can be found here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e3821449-3c6b-42f1-9fd9-0041345b3385&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e3821449-3c6b-42f1-9fd9-0041345b3385&amp;amp;displaylang=en&lt;/a&gt;. Install that package on the build server which will allow your code to compile.&lt;br /&gt;&lt;br /&gt;Then download the .NET CF 3.5 Power Toys - this will give your the Compact Framework build targets that MSBuild needs. This can be downloaded from here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c8174c14-a27d-4148-bf01-86c2e0953eab&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c8174c14-a27d-4148-bf01-86c2e0953eab&amp;amp;displaylang=en&lt;/a&gt;. Again that package needs to be installed on the build server. You may think it is odd that the build targets are included in this package, then so did I. They are also included with VS2008 but installing the Power Toys is a much better solution as it's a lot smaller install.&lt;br /&gt;&lt;br /&gt;Now remember with my configuration I mentioned earlier, I am running 64-bit server, as there is no 64-bit edition of .NET CF Power Toys, the build targets get installed to the 32-bit location on the file system: &lt;strong&gt;C:\Windows\Microsoft.NET\Framework\v3.5&lt;/strong&gt; but by default my build definition is set to "Auto" which will choose the 64-bit edition first, then use the MSBuild path to find the build targets. This will still result in a failed build because the 64-bit edition will be running from: C:\Windows\Microsoft.NET\Framework64\v3.5 and that path doesn't contain the files we need. So a simple change to the build definition to use x86 is needed: &lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/TCkcLZjKjNI/AAAAAAAAAb8/l-y-MyiEDjM/s1600/msBuildPlatform.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 253px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5487948603090177234" border="0" alt="" src="http://3.bp.blogspot.com/_zq7uh-qGrLw/TCkcLZjKjNI/AAAAAAAAAb8/l-y-MyiEDjM/s400/msBuildPlatform.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Once you make that change, queue a new build and your build should succeed.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;As for getting VS 2008 talking to TFS2010, I'll write a post on getting that to work. There is a lot of content on this in the community but a lot of it didn't work for me.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1013069793459935198?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1013069793459935198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1013069793459935198' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1013069793459935198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1013069793459935198'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/06/automating-your-windows-mobile-6x.html' title='Automating your Windows Mobile 6.x builds on TFS 2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_zq7uh-qGrLw/TCkcLZjKjNI/AAAAAAAAAb8/l-y-MyiEDjM/s72-c/msBuildPlatform.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2527847826589588140</id><published>2010-05-27T20:22:00.002Z</published><updated>2010-05-27T20:24:38.772Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone 7 Series running on a modified Samsung Omnia</title><content type='html'>&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yjlvtHjJtps&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/yjlvtHjJtps&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xd0d0d0&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Looks very slick...voice in French.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2527847826589588140?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2527847826589588140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2527847826589588140' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2527847826589588140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2527847826589588140'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/05/windows-phone-7-series-running-on.html' title='Windows Phone 7 Series running on a modified Samsung Omnia'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3290321133898611751</id><published>2010-05-27T19:21:00.008Z</published><updated>2010-05-27T20:05:44.911Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Netbooks'/><title type='text'>Installing Windows 7 on a netbook</title><content type='html'>&lt;a href="http://www.mini-nb.com/public/asus_eeepc_1001ha-frontale.jpg"&gt;&lt;img style="width: 500px; height: 500px;" alt="" src="http://www.mini-nb.com/public/asus_eeepc_1001ha-frontale.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;I recently bought an Asus Eee PC 1001 HA netbook for my wife to use for a really good price as it was an ex demo (end of line). This model has been superseded by a better model that includes a slightly faster CPU Intel Atom 1.66Ghz as the 1001 has a Intel Atom 1.6Ghz N270 processor. The newer model also comes with Windows 7 as oppossed to Windows XP which is what the 1001 model comes with. I have to say, I think it is brilliant.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;As mentioned it came with Windows XP Home Premium edition but as this was for my wife she didn't care. But after getting home I relised I couldn't join it to the Windows Server 2008 domain controller because Home Premium doesn't support Windows Domains. So she couldn't print, fax, access family pictures, get an IP address from the DHCP, access TFS..(not really, shes not a coder!) etc etc You can't even access a network UNC path from Home Edition.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;So XP clearly had to come off. So we installed Windows 7 Ultimate x86, bearing in mind this little machine only has 1gb of DDR2 RAM and it runs very well indeed.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;But the problem I found was installing the Windows 7 OS without a CD drive and no access to a network share? All I have are USB ports. So as I don't have a optical USB CD drive, I simply downloaded Windows 7 USB/DVD Download Tool from codeplex, found here: &lt;a href="http://wudt.codeplex.com/"&gt;http://wudt.codeplex.com/&lt;/a&gt; It is actually written in C# under Visual Studio 2008, with full source code available to download.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;This tool allows you to create a bootable USB flash card. So all I had to do was create a bootable USB flash card using the Windows 7 ISO, configure the BIOS on the Asus to boot from USB, install Windows 7, then job done.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S_7GS0WULkI/AAAAAAAAAb0/mB1ts1B7nGs/s1600/windows7downloadtool.png"&gt;&lt;img style="width: 400px; height: 211px;" id="BLOGGER_PHOTO_ID_5476032223521287746" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S_7GS0WULkI/AAAAAAAAAb0/mB1ts1B7nGs/s400/windows7downloadtool.png" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Windows 7 USB/DVD Download Tool&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;In fact this tool works with DVD's as well, so it will be useful for future DVD burning.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;This &lt;a href="http://www.ehow.com/how_5633623_adjust-windows-ultimate-netbooks.html"&gt;blog&lt;/a&gt; talks about disabling various Windows 7 services for optimization on a netbook pc, but to be honest I didn't need to disable anything, it just works really nicely.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;I did forget to mention that I download Asus's drivers for optimal WLAN, display adapter etc to better performance and to get the machine to behave correctly.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Good job Asus...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3290321133898611751?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3290321133898611751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3290321133898611751' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3290321133898611751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3290321133898611751'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/05/installing-windows-7-on-netbook.html' title='Installing Windows 7 on a netbook'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zq7uh-qGrLw/S_7GS0WULkI/AAAAAAAAAb0/mB1ts1B7nGs/s72-c/windows7downloadtool.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5833297095404994483</id><published>2010-05-22T08:15:00.012Z</published><updated>2010-05-22T17:38:27.670Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Azure'/><title type='text'>Moving Windows Azure CTP account over to RTM - don't forget to remove any unwanted services!</title><content type='html'>If like me you recently moved your Windows Azure CTP account over to an RTM account, ensure you delete any services that you don't want as you might be charged. I completely forgot I had 2 services deployed in Staging and 2 services deployed in production when I moved my account over. So a few weeks ago I had a bill for £187.10! I had been viewing my bills regularly and didn't see any charges until 24/04/10. So the charges were from 25/03/10 - 24/04/10.&lt;br /&gt;&lt;br /&gt;The important thing to note here is the pricing model in Windows Azure - I'm talking about hosting services which is the deploying of services and running services in the cloud bit of Windows Azure - not the Service Bus or SQL Azure - they have different pricing models.&lt;br /&gt;&lt;br /&gt;The charges are based on "compute hours". Although do note there are two types of pricing models within Azure. The first is a pay as you go type model so you only pay for what you use. The other model is a fixed contract where you agree to a fixed discounted monthly fee for a given time frame and any excess usage is charged at the standard rate.&lt;br /&gt;&lt;br /&gt;Do be aware, no matter whether your services are being used or not even if your services are not running this still eats into your "compute hours". It sounds unfair from the outset, but I don't think it is unfair as for those charges you get a dedicated VM, CPU, memory etc to your services. So you can be sure you'll have the resources available to serve up requests when needed.&lt;br /&gt;&lt;br /&gt;So as I am an MSDN Premium subscriber, I opted for the promotional offer of "free" services. So under this offer you get 750 "compute hours" under Windows Azure, 1,000,000 ACS transaction requests on AppFabric, 3 web edition databases etc. See here for more info on this promotional offer: &lt;a href="http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&amp;amp;locale=en-US&amp;amp;offer=MS-AZR-0005P"&gt;http://www.microsoft.com/windowsazure/offers/popup.aspx?lang=en&amp;amp;locale=en-US&amp;amp;offer=MS-AZR-0005P&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Utilization over the "free" 750 hours will be charged at the standard rate.&lt;br /&gt;&lt;br /&gt;Of course that works out to be one service constantly deployed in the cloud for 24 hrs a day for 31 days. So essentially free.&lt;br /&gt;&lt;br /&gt;Now regarding my bill I received, the good news is Microsoft refunded me the £187.10 due to the fact I forgot to remove the services and the fact that I didn't realize they were still deployed as I have only been using the Service Bus within Windows Azure lately (now known as the AppFabric). So I am grateful to Microsoft for doing this as they legally didn't have to.&lt;br /&gt;&lt;br /&gt;So when I noticed the bill, the first thing I wanted to do was delete the services to prevent further costs mounting up.&lt;br /&gt;&lt;br /&gt;So I went to the Windows Azure maintenance portal over at &lt;a href="http://windows.azure.com/"&gt;http://windows.azure.com/&lt;/a&gt; clicked on Windows Azure and noticed the services. But the Delete button was disabled:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_zq7uh-qGrLw/S_gThzJMDhI/AAAAAAAAAbk/9PVqhMaiXXQ/s1600/azure1.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 301px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5474146818454195730" border="0" alt="" src="http://2.bp.blogspot.com/_zq7uh-qGrLw/S_gThzJMDhI/AAAAAAAAAbk/9PVqhMaiXXQ/s400/azure1.png" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;This is not particularly intuitive, but you have to click "Suspend" which is the same as stop. Then the Delete button becomes enabled that allows you to delete the services!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S_gUPMltjDI/AAAAAAAAAbs/xcpZKGoYhCk/s1600/azure2.png"&gt;&lt;img style="WIDTH: 459px; HEIGHT: 296px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5474147598378830898" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S_gUPMltjDI/AAAAAAAAAbs/xcpZKGoYhCk/s400/azure2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5833297095404994483?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5833297095404994483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5833297095404994483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5833297095404994483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5833297095404994483'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/05/moving-windows-azure-ctp-account-over.html' title='Moving Windows Azure CTP account over to RTM - don&apos;t forget to remove any unwanted services!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_zq7uh-qGrLw/S_gThzJMDhI/AAAAAAAAAbk/9PVqhMaiXXQ/s72-c/azure1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6425343113845326763</id><published>2010-05-12T21:01:00.003Z</published><updated>2010-05-12T21:09:56.586Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio .NET 2008'/><title type='text'>MSTest: Not Executed after aborting a debugged MSTest</title><content type='html'>If you try to debug a MS Test unit test in VS 2008 but stop the debugger before the test is completed (abort the test) the test status will be marked with "Aborted". Which is fine and expected. But if you then try to execute any other test, whether this is debugging a test or just executing a test, it will fail and the status of all attempted tests will be "Not Executed". And from here in no tests will ever execute again..until you kill process "vsperfmon.exe". If you kill that process, then unit tests will then continue to execute.&lt;br /&gt;&lt;br /&gt;This defect seems to be fixed in VS 2010 which is great but it still exists in VS 2008 which is a pain as Windows Mobile developers still require VS 2008 to develop WM apps (this defect applies to both desktop and device tests).&lt;br /&gt;&lt;br /&gt;There is a bug report on Microsoft Connect: &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/299925/after-debugging-a-unit-test-vsperfmon-exe-must-be-killed-to-be-able-run-further-tests"&gt;https://connect.microsoft.com/VisualStudio/feedback/details/299925/after-debugging-a-unit-test-vsperfmon-exe-must-be-killed-to-be-able-run-further-tests&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As always, if you find this defect annoying, then use the site above to vote for a fix.&lt;br /&gt;&lt;br /&gt;This bug has been around for sometime and it's only today I learned the workaround!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6425343113845326763?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6425343113845326763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6425343113845326763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6425343113845326763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6425343113845326763'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/05/mstest-not-executed-after-aborting.html' title='MSTest: Not Executed after aborting a debugged MSTest'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2019072095093979474</id><published>2010-05-12T20:23:00.002Z</published><updated>2010-05-12T20:34:43.097Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>To inject IServiceLocator or not to inject</title><content type='html'>I had a discussion the other day about it being a bad idea to inject the &lt;a href="http://commonservicelocator.codeplex.com/"&gt;IServiceLocator&lt;/a&gt; as a dependency into the constructor of consuming types. Now I'm talking about the Common Service Locator by the p&amp;amp;p team at Microsoft (&lt;a href="http://commonservicelocator.codeplex.com/"&gt;http://commonservicelocator.codeplex.com/&lt;/a&gt;) but to be honest this applies to the Service Locator pattern in general.&lt;br /&gt;&lt;br /&gt;The argument was based on the fact that it makes testing more difficult as you not only have to mock or provide types to the constructor but you have to add them to a service locator if injecting the service locator interface.&lt;br /&gt;&lt;br /&gt;There are valid reasons for not doing this but we don't live in an ivory tower and sometimes we need to pull types from the container at runtime that we simply do not know at design time. In this case it makes perfect sense for using a service locator, right? as the whole point of the pattern is to abstract container from implementation code.&lt;br /&gt;&lt;br /&gt;I'm curious of other developers feel for this and their approach as to whether they do this or not, and if so why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2019072095093979474?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2019072095093979474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2019072095093979474' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2019072095093979474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2019072095093979474'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/05/to-inject-iservicelocator-or-not-to.html' title='To inject IServiceLocator or not to inject'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-349065063407957431</id><published>2010-04-23T21:20:00.005Z</published><updated>2011-03-28T21:00:39.618Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><title type='text'>Turning off the context menu scrolling in VS2010</title><content type='html'>&lt;span style="font-weight: bold;"&gt;UPDATE (28/03/2011)&lt;/span&gt;: This has been fixed in VS2010 SP1: &lt;a href="http://www.simonrhart.com/2011/03/unnecessary-context-scrolling-in-vs.html"&gt;http://www.simonrhart.com/2011/03/unnecessary-context-scrolling-in-vs.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you have noticed in VS2010 when right clicking something and displaying the context popup menu. You sometimes get a scrollable menu appear in which you have to use the mouse wheel, or press the up or down arrows that are displayed for this type of menu to see all items in the popup menu.&lt;br /&gt;&lt;br /&gt;Sadly turning off this "feature" is not possible as it seems to be a bug: &lt;a href="https://connect.microsoft.com/VisualStudio/feedback/details/532806/context-menus-open-in-scrolling-mode-while-there-is-place-to-show-the-whole-menu/?wa=wsignin1.0"&gt;https://connect.microsoft.com/VisualStudio/feedback/details/532806/context-menus-open-in-scrolling-mode-while-there-is-place-to-show-the-whole-menu/?wa=wsignin1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you find this bug annoying enough, please vote on the connect site so hopefully we will get a hot fix rather than having to wait for SP1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-349065063407957431?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/349065063407957431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=349065063407957431' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/349065063407957431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/349065063407957431'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/04/turning-off-context-menu-scrolling-in.html' title='Turning off the context menu scrolling in VS2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1091553416543331319</id><published>2010-04-23T21:02:00.003Z</published><updated>2010-04-23T21:18:25.049Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>[TFS 2010] (1835): Task failed because "resgen.exe" was not found</title><content type='html'>I recently upgraded my build server from TFS 2010 RC (which worked fairly well I have to say) - although its worth pointing out here that VS 2010 RTM doesn't work with TFS 2010 RC. You get all kinds of build errors.&lt;br /&gt;&lt;br /&gt;I recently checked some code in and the build server gives me the following error:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (1835): Task failed because "resgen.exe" was not found, or the correct Microsoft Windows SDK is not installed. The task is looking for "resgen.exe" in the "bin" subdirectory beneath the location specified in the InstallationFolder value of the registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A. You may be able to solve the problem by doing one of the following: 1) Install the Microsoft Windows SDK. 2) Install Visual Studio 2010. 3) Manually set the above registry key to the correct location. 4) Pass the correct location into the "ToolPath" parameter of the task.&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;So I have given in and installed Visual Studio on the build server and this seems to fix the problem! - I know this just doesn't sound right.... I could of tried and installed the Windows SDK on the build server but I do want to build Windows phone 7 Series apps on my build server and I know that bits in WP7 are not in the Windows SDK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1091553416543331319?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1091553416543331319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1091553416543331319' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1091553416543331319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1091553416543331319'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/04/tfs-2010-1835-task-failed-because.html' title='[TFS 2010] (1835): Task failed because &quot;resgen.exe&quot; was not found'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-475993354410211133</id><published>2010-04-21T21:44:00.012Z</published><updated>2010-04-21T22:03:48.553Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>ServiceLocator.Current - calls the SetServiceLocator delegate everytime!</title><content type='html'>If like me you were under the impression that calling &lt;span style="font-family:courier new;"&gt;ServiceLocator.SetLocalProvider&lt;/span&gt; result would be cached when using static member &lt;span style="font-family:courier new;"&gt;ServiceLocator.Current&lt;/span&gt; then you'll be wrong.&lt;br /&gt;&lt;br /&gt;I was surprised to find out that the &lt;span style="font-family:courier new;"&gt;ServiceLocator&lt;/span&gt; implementation passed to &lt;span style="font-family:courier new;"&gt;ServiceLocator.SetLocalProvider&lt;/span&gt; was created everytime I called &lt;span style="font-family:courier new;"&gt;ServiceLocator.Current&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I know I should always inject &lt;span style="font-family:courier new;"&gt;IServiceLocator&lt;/span&gt; into the ctor of the consumer types, but there are rare occasions that I need to use &lt;span style="font-family:courier new;"&gt;ServiceLocator.Current&lt;/span&gt; in static classes.&lt;br /&gt;&lt;br /&gt;The implementation of &lt;span style="font-family:courier new;"&gt;ServiceLocator.Current&lt;/span&gt; looks like so:&lt;pre&gt;public static IServiceLocator Current&lt;br /&gt;{&lt;br /&gt;   get { return currentProvider(); }&lt;br /&gt;}&lt;/pre&gt;currentProvider() is a good old fashioned delegate and looks like so:&lt;pre&gt;public delegate IServiceLocator ServiceLocatorProvider();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So instead of doing this:&lt;pre&gt;ServiceLocator.SetLocatorProvider(() =&gt; new WindsorServiceLocator(_container));&lt;/pre&gt;Do this:&lt;pre&gt;IServiceLocator castle = new WindsorServiceLocator(_container);&lt;br /&gt;ServiceLocator.SetLocatorProvider(() =&gt; castle);&lt;/pre&gt;You will get a load less garbage collections as a result.&lt;br /&gt;&lt;br /&gt;If you have no idea what I am talking about in this post, please see the Common Service Locator by the p&amp;amp;p team at Microsoft here: &lt;a href="http://commonservicelocator.codeplex.com/"&gt;http://commonservicelocator.codeplex.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-475993354410211133?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/475993354410211133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=475993354410211133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/475993354410211133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/475993354410211133'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/04/servicelocatorcurrent-calls.html' title='ServiceLocator.Current - calls the SetServiceLocator delegate everytime!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-7526400909185713961</id><published>2010-03-29T18:55:00.006Z</published><updated>2010-03-29T19:36:51.153Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>Making use of the Command Pattern on Windows Mobile/phone</title><content type='html'>The Command pattern is a great pattern for abstracting business processes from your implementation code. This pattern is becoming very popular throughout different types of systems. Whether this is MVC thin client, fat clients such as MVP, MVVM.&lt;br /&gt;&lt;br /&gt;The Command pattern works really nicely in combination with a IoC container and DI framework that I have talked about before on this blog.&lt;br /&gt;&lt;br /&gt;Often it is desirable for a command to take a context or state. A command should only have one method and should only have one role (single responsibility). The interface for a command could look like so:&lt;pre&gt;public interface ICommand&amp;lt;T&amp;gt;&lt;br /&gt;{&lt;br /&gt;    void Execute(T context);&lt;br /&gt;}&lt;/pre&gt;So our context here is a generic and is defined when the command is registered with the container.&lt;br /&gt;&lt;br /&gt;So imagine we have a CRM system that when a customer is registered, we want to send that customer an email to confirm he/she has been setup correctly. You might have a domain model in this case that raises an event that is caught on the middle tier. When this occurs, instead of baking that code into the presenter/controller/business class, you abstract it out into a command. This not only makes your system more readable/maintainable but makes it easier to test too.&lt;br /&gt;&lt;br /&gt;So in this case you could have a context class that contains the state such as the Customer domain object like so:&lt;pre&gt;public class EmailCustomerConfirmationContext&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    public EmailCustomerConfirmationContext(Customer customer)&lt;br /&gt;    {&lt;br /&gt;       Customer = customer;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Customer Customer{get; private set;}&lt;br /&gt;}&lt;/pre&gt;Our command might look something like the following:&lt;pre&gt;public class EmailCustomerConfirmationCommand : ICommand&amp;lt;EmailCustomerConfirmationContext&amp;gt;&lt;br /&gt;{&lt;br /&gt;    private IEmailAdapter _emailAdapter;&lt;br /&gt;&lt;br /&gt;    public EmailCustomerConfirmationCommand(IEmailAdapter emailAdapter)&lt;br /&gt;    {&lt;br /&gt;        //inject dependencies here.&lt;br /&gt;        _emailAdapter = emailAdapter;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public void Execute(EmailCustomerConfirmationContext context)&lt;br /&gt;    {&lt;br /&gt;       _emailAdapter.Send(context.Customer);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;Registering the command with the container (Compact Container - see previous posts on using this container) would look something like the following:&lt;pre&gt;container.AddComponent&amp;lt;ICommand&amp;lt;EmailCustomerConfirmationContext&amp;gt;, EmailCustomerConfirmationCommand&amp;gt;();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Very clean approach. Of course the more dependencies you add to the command, the more complex it will become which means harder to test. So sometimes commands can become over complex. Bear this in mind when adopting this pattern.&lt;br /&gt;&lt;br /&gt;Executing the command could look something like the following(assuming you are using the service locator):&lt;pre&gt;var command = ServiceLocator.Current.GetInstance&amp;lt;ICommand&amp;lt;TContext&amp;gt;&amp;gt;();&lt;br /&gt;if (!command.IsNull())&lt;br /&gt;{&lt;br /&gt;    command.Execute(context);&lt;br /&gt;}&lt;/pre&gt;In terms of handling errors etc, this could be handled via events using some sort of event aggregator pattern or the context itself to pass back data so the middle tier can act accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-7526400909185713961?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/7526400909185713961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=7526400909185713961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7526400909185713961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7526400909185713961'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/making-use-of-command-pattern-on.html' title='Making use of the Command Pattern on Windows Mobile/phone'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6791106961687947021</id><published>2010-03-28T20:12:00.003Z</published><updated>2010-03-28T20:18:16.647Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>TFS 2010 - the new build definition window</title><content type='html'>Jason Prickett has recently written a good article on the new Build definition window in VS 2010 - it's now dockable! It also has a new CI type named Gated-checkin. So developers need to have a green CI before they can checkin. Cool. I have been checking this new Gated-checkin feature out in the RC version recently, and I'm not sure it is working correctly. But will write back soon on my findings.&lt;br /&gt;&lt;br /&gt;See here:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/jpricket/archive/2010/01/19/tfs-2010-the-new-build-definition-window.aspx"&gt;http://blogs.msdn.com/jpricket/archive/2010/01/19/tfs-2010-the-new-build-definition-window.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6791106961687947021?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6791106961687947021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6791106961687947021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6791106961687947021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6791106961687947021'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/tfs-2010-new-build-definition-window.html' title='TFS 2010 - the new build definition window'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5917674135622657138</id><published>2010-03-28T19:31:00.006Z</published><updated>2010-03-28T19:53:27.538Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>Cool new feature with VS2010 and TFS 2010</title><content type='html'>I recently installed TFS 2010 RC x64 and only now got round to playing with it. I have to say once I got over the 'gremlins' during the installation everything else is pretty slick. There are many features I like and many that are going to make our lifes better.&lt;br /&gt;&lt;br /&gt;One of the really horible things I hated about VS 2008 and TFS 2008 was after a partially succeeded build, opening up the build output in Build Explorer would only tell you something went wrong. In other words, the build partially suceeded. What? what does this mean? we know from experience this generally means a unit test had failed, but which one, and how do I fix it?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The only way to know which unit test had failed would be to troll through the build log - very painful when you have a large build script spanning multiple projects and 1000's of unit tests. I used to search for "FAIL". But some developers name their unit tests with the word "FAIL" in it so this doesn't help matters as it takes forever to find the real error.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I created a really simple test project and added a test method that throw an exception, after I checked in under a CI build definition, I got the following:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S6-xHnAM4fI/AAAAAAAAAbU/FLytudIERhI/s1600/partial+succeed.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 339px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5453772418055987698" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S6-xHnAM4fI/AAAAAAAAAbU/FLytudIERhI/s400/partial+succeed.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, how cool is that! Weldone Microsoft. I think this will make many developers very happy. Look at the options we get at the top, [Open Drop Folder], [Retain Indefinately] etc it just makes our lifes easier. But the best bit, the reason for posting this blog entry, If I click "View Test Results" I get the following:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S6-y1B3KhfI/AAAAAAAAAbc/3Gyd7x4DyPs/s1600/testResults.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 161px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5453774297871582706" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S6-y1B3KhfI/AAAAAAAAAbc/3Gyd7x4DyPs/s400/testResults.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm impressed, this will make us so much more productive, a reason alone to upgrade. Excellent stuff!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5917674135622657138?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5917674135622657138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5917674135622657138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5917674135622657138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5917674135622657138'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/cool-new-feature-with-vs2010-and-tfs.html' title='Cool new feature with VS2010 and TFS 2010'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zq7uh-qGrLw/S6-xHnAM4fI/AAAAAAAAAbU/FLytudIERhI/s72-c/partial+succeed.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3431792505786299869</id><published>2010-03-24T22:42:00.003Z</published><updated>2010-03-24T22:48:53.219Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>MVVM - Windows phone 7 series pattern of choice</title><content type='html'>This post is really for my benefit (although it might help others). Here is a good article on the MVVM (Model-View-ViewModel) pattern that is showing a lot of interest in the WPF communities.&lt;br /&gt;&lt;br /&gt;It is very much a different way of thinking when designing UI architecture although very similar to Fowlers relatively new Presentation Model pattern.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/dd419663.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3431792505786299869?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3431792505786299869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3431792505786299869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3431792505786299869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3431792505786299869'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/mvvm-windows-phone-7-series-pattern-of.html' title='MVVM - Windows phone 7 series pattern of choice'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2498139415838432619</id><published>2010-03-24T21:08:00.006Z</published><updated>2010-03-24T21:34:50.600Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Implementing an IoC container in Silverlight on Windows phone 7 series</title><content type='html'>I wrote a while ago about implementing a Service Locator for the CompactContainer on the Compact Framework here: &lt;a href="http://www.simonrhart.com/2010/02/implementing-commonservicelocator-on.html"&gt;http://www.simonrhart.com/2010/02/implementing-commonservicelocator-on.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I mentioned in that post that I was using the &lt;span style="font-family:courier new;"&gt;CompactContainer&lt;/span&gt; for the CF freely available here: &lt;a href="http://code.google.com/p/compactcontainer/"&gt;http://code.google.com/p/compactcontainer/&lt;/a&gt; But now as I'm getting into Silverlight as it's the technology of choice when building applications for the Windows phone 7 series platform (as well as XNA), I needed an IoC container to solve the same problems on Silverlight as they do on the Compact Framework.&lt;br /&gt;&lt;br /&gt;So I tried to port the container along with the &lt;span style="font-family:courier new;"&gt;ServiceLocator&lt;/span&gt; as blogged about before. I recieved errors in the &lt;span style="font-family:courier new;"&gt;ComponentCollection&lt;/span&gt; class after I tried to compile under Silverlight. Mainly because the following predicate methods such as:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;List&lt;t&gt;.FindAll&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;List&lt;t&gt;.Find&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Are not supported in Silverlight 3 as the documentation suggests. However, they are in XNA. As the generic &lt;span style="font-family:courier new;"&gt;List&lt;/span&gt; class belongs to &lt;span style="font-family:courier new;"&gt;mscorlib.dll&lt;/span&gt; (&lt;span style="font-family:courier new;"&gt;System.Collections.Generic&lt;/span&gt;) I noticed that &lt;span style="font-family:courier new;"&gt;mscorlib&lt;/span&gt; is shared for both XNA and Silverlight applications on WP7. I'm trying to find out why this is, or if there is a way of making those methods work in Silverlight.&lt;/p&gt;&lt;p&gt;Anyway it's not the end of the world that those methods are not in Silverlight, all I had to do was replace the following methods in the &lt;span style="font-family:courier new;"&gt;ComponentCollection&lt;/span&gt; class:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;public List&amp;lt;ComponentInfo&amp;gt; GetComponentInfoListFor(Type serviceType)&lt;br /&gt;{&lt;br /&gt;    return _list.FindAll(ci =&amp;gt; ci.ServiceType == serviceType);&lt;br /&gt;}&lt;br /&gt;    &lt;br /&gt;public ComponentInfo FindForService(Type serviceType)&lt;br /&gt;{&lt;br /&gt;   return _list.Find(ci =&amp;gt; ci.ServiceType.Equals(serviceType));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ComponentInfo FindForClass(Type classType)&lt;br /&gt;{&lt;br /&gt;   return _list.Find(ci =&amp;gt; ci.ClassType.Equals(classType));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ComponentInfo FindKey(string key)&lt;br /&gt;{&lt;br /&gt;   return _list.Find(ci =&amp;gt; ci.Key.Equals(key));&lt;br /&gt;}&lt;/pre&gt;With the following code:&lt;pre&gt;public List&lt;componentinfo&gt; GetComponentInfoListFor(Type serviceType)&lt;br /&gt;{&lt;br /&gt;    List&amp;lt;ComponentInfo&amp;gt; results = new List&amp;lt;ComponentInfo&amp;gt;();&lt;br /&gt;&lt;br /&gt;    foreach(ComponentInfo component in _list)&lt;br /&gt;    {&lt;br /&gt;       if (component.ServiceType == serviceType)&lt;br /&gt;          results.Add(component);&lt;br /&gt;    }&lt;br /&gt;    return results;&lt;br /&gt;}&lt;br /&gt;     &lt;br /&gt;public ComponentInfo FindForService(Type serviceType)&lt;br /&gt;{&lt;br /&gt;    ComponentInfo result = null;&lt;br /&gt;    foreach(ComponentInfo component in _list)&lt;br /&gt;    {&lt;br /&gt;       if (component.ServiceType == serviceType)&lt;br /&gt;       {&lt;br /&gt;          result = component;&lt;br /&gt;          break;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ComponentInfo FindForClass(Type classType)&lt;br /&gt;{&lt;br /&gt;    ComponentInfo result = null;&lt;br /&gt;    foreach (ComponentInfo component in _list)&lt;br /&gt;    {&lt;br /&gt;       if (component.ClassType.Equals(classType))&lt;br /&gt;       {&lt;br /&gt;           result = component;&lt;br /&gt;           break;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ComponentInfo FindKey(string key)&lt;br /&gt;{&lt;br /&gt;    ComponentInfo result = null;&lt;br /&gt;    foreach (ComponentInfo component in _list)&lt;br /&gt;    {&lt;br /&gt;       if (component.Key.Equals(key))&lt;br /&gt;       {&lt;br /&gt;          result = component;&lt;br /&gt;          break;&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    return result;&lt;br /&gt;}&lt;/pre&gt;That was all I had to change everything else just compiled and worked. Full dependency injection worked as per on the Compact Framework. It seems moving to Silverlight is going to be less painful than I originally thought!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2498139415838432619?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2498139415838432619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2498139415838432619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2498139415838432619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2498139415838432619'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/implementing-ioc-container-in.html' title='Implementing an IoC container in Silverlight on Windows phone 7 series'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3874739058628417705</id><published>2010-03-16T20:18:00.006Z</published><updated>2010-03-16T20:39:30.410Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone 7 Series emulator is running slow</title><content type='html'>When I first downloaded the new Windows Phone 7 Series developer tools CTP package, I found the new emulator to be very slow. This is the opposite of what I was expecting as the new emulator is built for x86, runs within a VM and supports hardware GPU host acceleration (so long as you have a gx capable of DirectX10 and at least support for DDI10) - which my laptop does.&lt;br /&gt;&lt;br /&gt;To determin whether you have DirectX10 support and at least DDI10, run DxDiag.exe from the command-prompt and inspect the Display tab.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So what next, ok so I learned that in order for the emulator to make use of the GPU host from the VM I needed to enable HW virtualization. So how do I know if I have this enabled? this is enabled at BIOS level and normally disabled by OEMs by default. You can run the Microsoft Hardware-Assisted Virtualization Tool here: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=163321"&gt;http://go.microsoft.com/fwlink/?LinkId=163321&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S5_rVqRs5EI/AAAAAAAAAbM/sAg3z4xH5qw/s1600-h/no+virtualization+enabled.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 360px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5449332831499904066" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S5_rVqRs5EI/AAAAAAAAAbM/sAg3z4xH5qw/s400/no+virtualization+enabled.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So after running this tool I got the above. So this confirms that I didn't have hw virtualization enabled. After enabling it in the BIOS my Windows Phone 7 Series emulator is now running much faster!&lt;/p&gt;&lt;p&gt;More details about this process here (not WP7 specific): &lt;a href="http://www.microsoft.com/windows/virtual-pc/support/configure-bios.aspx"&gt;http://www.microsoft.com/windows/virtual-pc/support/configure-bios.aspx&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_zq7uh-qGrLw/S5_p8d9IK3I/AAAAAAAAAbE/2Xgm-cQJvr8/s1600-h/directx10.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3874739058628417705?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3874739058628417705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3874739058628417705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3874739058628417705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3874739058628417705'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/improving-performance-of-windows-phone.html' title='Windows Phone 7 Series emulator is running slow'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_zq7uh-qGrLw/S5_rVqRs5EI/AAAAAAAAAbM/sAg3z4xH5qw/s72-c/no+virtualization+enabled.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3397422391558923955</id><published>2010-03-16T19:08:00.001Z</published><updated>2010-03-16T19:10:11.813Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>New Windows phone series 7 forum</title><content type='html'>Ask your new Windows phone 7 series questions here:&lt;br /&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/"&gt;http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3397422391558923955?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3397422391558923955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3397422391558923955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3397422391558923955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3397422391558923955'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/new-windows-phone-series-7-forum.html' title='New Windows phone series 7 forum'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-795781979633521129</id><published>2010-03-15T19:40:00.002Z</published><updated>2010-03-15T19:43:36.211Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone Developer Tools CTP now available!</title><content type='html'>Download the tools here FREE: There is one install, that installs everything required for Windows phone 7 Series development (inc of course VS 2010 Express):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;amp;displaylang=en#filelist"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=2338b5d1-79d8-46af-b828-380b0f854203&amp;amp;displaylang=en#filelist&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-795781979633521129?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/795781979633521129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=795781979633521129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/795781979633521129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/795781979633521129'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/windows-phone-developer-tools-ctp-now.html' title='Windows Phone Developer Tools CTP now available!'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3999786115690945408</id><published>2010-03-12T10:59:00.003Z</published><updated>2010-03-12T11:17:04.258Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><title type='text'>Pre-order VS 2010 discount</title><content type='html'>Microsoft Visual Studio 2010 Professional will launch on April 12 but you can beat the rush and secure your copy today by pre-ordering at the affordable estimated retail price of £484.99.&lt;br /&gt;&lt;br /&gt;If you use a previous version of Visual Studio or any other development tool then you are eligible for this upgrade. Along with all the great new features in Visual Studio 2010 (see &lt;a href="http://www.microsoft.com/visualstudio"&gt;www.microsoft.com/visualstudio&lt;/a&gt;) Visual Studio 2010 Professional includes a 12-month MSDN Essentials subscription which gives you access to core Microsoft platforms: Windows 7 Ultimate, Windows Server 2008 R2 Enterprise, and Microsoft SQL Server 2008 R2 Datacenter.&lt;br /&gt;&lt;br /&gt;So visit &lt;a href="http://www.microsoft.com/visualstudio/en-gb/pre-order-visual-studio-2010"&gt;http://www.microsoft.com/visualstudio/en-gb/pre-order-visual-studio-2010&lt;/a&gt; to check out all the new features and sign up for this great offer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3999786115690945408?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3999786115690945408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3999786115690945408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3999786115690945408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3999786115690945408'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/03/pre-order-vs-2010-to-get-discount.html' title='Pre-order VS 2010 discount'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2412204440174330989</id><published>2010-02-28T12:36:00.007Z</published><updated>2010-02-28T15:35:29.050Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS'/><title type='text'>[ Application Tier ] TF255437: An error occured while querying the Windows Management Instrumentation (WMI) interface on the following computer:</title><content type='html'>You may have received the following error messsage while processing the Readiness checks during the installation of TFS 2010 CTP recently:&lt;strong&gt; [Application Tier] TF255437: An error occured while querying the Windows Management Instrumentation (WMI) interface on the following computer:. The following error message was received: Invalid Namespace. &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So I though I'd check that WMI Service is running, and it was. After searching around it turns out I needed to enable WMI Compatibility for IIS 6 under IIS. You can enable this under Server Manager in Server 2008 and change the IIS role.&lt;br /&gt;&lt;br /&gt;I think this 'feature' has been fixed for RTM of TFS 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2412204440174330989?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2412204440174330989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2412204440174330989' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2412204440174330989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2412204440174330989'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/application-tier-tf255437-error-occured.html' title='[ Application Tier ] TF255437: An error occured while querying the Windows Management Instrumentation (WMI) interface on the following computer:'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-3318373516958601026</id><published>2010-02-19T19:06:00.002Z</published><updated>2010-02-19T19:13:06.014Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>How to find out when your pre-release version of Windows 7 will expire</title><content type='html'>If you are still running pre-release Windows 7 OS like I am, it will expire soon. So how do you find out when it expires? Simple run winver.exe on the run menu and you'll get this. My copy expires on 1st March 2010.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_zq7uh-qGrLw/S37iiTYfXNI/AAAAAAAAAas/qTiIA3G7DuY/s1600-h/win7expires.png"&gt;&lt;img style="WIDTH: 479px; HEIGHT: 377px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5440034478856559826" border="0" alt="" src="http://1.bp.blogspot.com/_zq7uh-qGrLw/S37iiTYfXNI/AAAAAAAAAas/qTiIA3G7DuY/s400/win7expires.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-3318373516958601026?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/3318373516958601026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=3318373516958601026' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3318373516958601026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/3318373516958601026'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/how-to-find-out-when-your-pre-release.html' title='How to find out when your pre-release version of Windows 7 will expire'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zq7uh-qGrLw/S37iiTYfXNI/AAAAAAAAAas/qTiIA3G7DuY/s72-c/win7expires.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2790434289091936986</id><published>2010-02-19T18:48:00.002Z</published><updated>2010-02-19T18:51:10.413Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zune HD'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Zune HD software for x64 platforms</title><content type='html'>Don't make the same mistake as I did in downloading the x86 version of Zune if you run x64 version of Windows.&lt;br /&gt;&lt;br /&gt;Get the x64 version here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9d25c2a6-cae3-49b0-a474-124fe79628a8&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=9d25c2a6-cae3-49b0-a474-124fe79628a8&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: The x64 version is ~400mb where as the x86 is ~50mb !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2790434289091936986?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2790434289091936986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2790434289091936986' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2790434289091936986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2790434289091936986'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/zune-hd-software-for-x64-platforms.html' title='Zune HD software for x64 platforms'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-240466588162864856</id><published>2010-02-19T01:27:00.004Z</published><updated>2010-02-19T01:32:56.069Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Preview of Windows phone 7 Series</title><content type='html'>&lt;object width="800" height="600"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7IOTrqlz4jo&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en_US&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/7IOTrqlz4jo&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-240466588162864856?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/240466588162864856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=240466588162864856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/240466588162864856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/240466588162864856'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/preview-of-windows-phone-7-series.html' title='Preview of Windows phone 7 Series'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8292963939895170220</id><published>2010-02-18T05:57:00.003Z</published><updated>2010-02-18T06:00:11.066Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>It's Windows phone 7 Series time at MIX this year</title><content type='html'>It's no secret that MIX will be covering a lot of the Windows phone 7 Series content this year in Las Vegas (March 15th - 17th).&lt;br /&gt;&lt;br /&gt;I just wish I was going, perhaps if I can find a cheap flight.....&lt;br /&gt;&lt;br /&gt;Note: Windows phone sessions to be confirmed...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://live.visitmix.com/"&gt;http://live.visitmix.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8292963939895170220?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8292963939895170220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8292963939895170220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8292963939895170220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8292963939895170220'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/its-windows-phone-7-series-time-at-mix.html' title='It&apos;s Windows phone 7 Series time at MIX this year'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2448044949574486223</id><published>2010-02-17T04:57:00.012Z</published><updated>2010-02-17T12:50:30.200Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><title type='text'>Implementing the CommonServiceLocator on the Compact Framework</title><content type='html'>You may have come across or used the &lt;a href="http://www.codeplex.com/CommonServiceLocator"&gt;CommonServiceLocator&lt;/a&gt; API as developed by the p&amp;amp;p team at Microsoft for your desktop applications in the past.&lt;br /&gt;&lt;br /&gt;Before we go any further, it is worth explaining what a Service Locator is. The Service Locator is a pattern that abstracts your retriveal of components or services from the underlying container model that is used to house them.&lt;br /&gt;&lt;br /&gt;So no matter what container you use, i.e. Castle Windsor, Spring, StructureMap etc pulling anything from the container in code will always be the same and consistent across layers.&lt;br /&gt;&lt;br /&gt;Martin Fowler explains it better than I can here: &lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;http://www.martinfowler.com/articles/injection.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All you have to do is write an implementor for the Service Locator to use. You'll note all the famous ones on the site above have already been implemented. But of course these don't work on the CF, so what do we do?&lt;br /&gt;&lt;br /&gt;Firstly, you need to download the source code for the CommonServiceLocator as the project needs to be modified slightly. Simply remove all references to the &lt;span style="font-family:courier new;"&gt;ActivationException.Desktop&lt;/span&gt; class as the constructors in that class are not supported on the CF. That is it! - for the service locator project. Now all that remains is the implementor. This depends on what container you are using. We have been using a container called CompactContainer written by &lt;a href="http://blog.schuager.com/"&gt;Germán Schuager&lt;/a&gt; that works well (uses reflection as it supports true dependency injection).&lt;br /&gt;&lt;br /&gt;CompactContainer can be downloaded from here: &lt;a href="http://code.google.com/p/compactcontainer/"&gt;http://code.google.com/p/compactcontainer/&lt;/a&gt; it is freely available under the Apache Licence.&lt;br /&gt;&lt;br /&gt;In order to write an implementor for the CommonServiceLocator, all you need to do is write a class that derives from abstract class &lt;span style="font-family:courier new;"&gt;ServiceLocatorImplBase&lt;/span&gt;, then tell the service locator where the instance of the container is and a reference to itself. This class implements &lt;span style="font-family:courier new;"&gt;IServiceLocator&lt;/span&gt; too, so itself can be injected into classes - for whatever reason.&lt;br /&gt;&lt;br /&gt;The class is really simple, it could look something like this, here we have named it &lt;span style="font-family:courier new;"&gt;CompactServiceLocator&lt;/span&gt;:&lt;pre&gt;&lt;br /&gt;public class CompactServiceLocator : ServiceLocatorImplBase&lt;br /&gt;{&lt;br /&gt;    private readonly IContainer _compactContainer;&lt;br /&gt;    private bool _disposed;&lt;br /&gt;    public CompactServiceLocator(IContainer compactContainer)&lt;br /&gt;    {&lt;br /&gt;        _compactContainer = compactContainer;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    protected override object DoGetInstance(Type serviceType, string key)&lt;br /&gt;    {&lt;br /&gt;        object resolvedObject = null;&lt;br /&gt;&lt;br /&gt;       // Resolve using a key if we have a key&lt;br /&gt;       if (!key.IsNull())&lt;br /&gt;       {&lt;br /&gt;           resolvedObject = _compactContainer.Resolve(key);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       // Resolve using type if the object has not been resolved&lt;br /&gt;       if(resolvedObject == null &amp;amp;&amp;amp; !serviceType.IsNull())&lt;br /&gt;       {&lt;br /&gt;          resolvedObject = _compactContainer.Resolve(serviceType);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       return resolvedObject;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected override IEnumerable&amp;lt;object&amp;gt;&lt;br /&gt;           DoGetAllInstances(Type serviceType)&lt;br /&gt;    {&lt;br /&gt;        return _compactContainer.GetServices(serviceType);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void Dispose(bool disposing)&lt;br /&gt;    {&lt;br /&gt;        if (!_disposed)&lt;br /&gt;        {&lt;br /&gt;            if (disposing)&lt;br /&gt;            {&lt;br /&gt;                _compactContainer.Dispose();&lt;br /&gt;            }&lt;br /&gt;            _disposed = true;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public override void Dispose()&lt;br /&gt;    {&lt;br /&gt;        Dispose(true);&lt;br /&gt;        GC.SuppressFinalize(this);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;So essentially the above code is fairly simple in that all it is doing is it allows the service locator to call your specific container method. i.e. the implementation of method &lt;span style="font-family:courier new;"&gt;DoGetInstance()&lt;/span&gt; calls the specific container method to get an instance from the container. In this case it is method &lt;span style="font-family:courier new;"&gt;Resolve()&lt;/span&gt;. It is just implementation specific code which will look different from container to container.&lt;br /&gt;&lt;br /&gt;So now you have written an implementor to go along side the Castle Windsor etc adapters, how do you use it? Well first you have to tell the Service Locator the container instance it should use, then set a reference to the service locator interface that maps to itself, like so:&lt;pre&gt;Container container = new Container();&lt;br /&gt;ServiceLocator.SetLocatorProvider(() =&gt; new CompactServiceLocator(container));&lt;br /&gt;container.AddComponentInstance&amp;lt;IServiceLocator&amp;gt;(ServiceLocator.Current);&lt;/pre&gt;Container in this case is the CompactContainer freely available as mentioned above.&lt;br /&gt;&lt;br /&gt;Asking for services is done as follows:&lt;pre&gt;ServiceLocator.Current.GetInstance&amp;lt;IFooBar&amp;gt;();&lt;/pre&gt;Where IFooBar is your registered interface on the container.&lt;br /&gt;&lt;br /&gt;That is it - as easy as that. If anyone would like me to put together a complete solution demoing this, please let me know. I didn't do it as the code is all available on line apart from the CompactContainer ServiceLocator implementor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2448044949574486223?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2448044949574486223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2448044949574486223' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2448044949574486223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2448044949574486223'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/implementing-commonservicelocator-on.html' title='Implementing the CommonServiceLocator on the Compact Framework'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4548749419221233522</id><published>2010-02-17T02:44:00.004Z</published><updated>2010-02-17T02:49:01.493Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Windows Mobile 6.5.3 Developer Toolkit Released</title><content type='html'>You may have noticed that the Windows Mobile 6.5.3 SDK was released two weeks ago for 1 day then pulled from MSDN. I don't think Microsoft has made a public announcement why this was, but it is back under a new name. The 6.5.3 Developer Toolkit was uploaded today and can be downloaded from here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=c0213f68-2e01-4e5c-a8b2-35e081dcf1ca&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course be sure to change your target project type within Visual Studio to make use of the new emulators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4548749419221233522?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4548749419221233522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4548749419221233522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4548749419221233522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4548749419221233522'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/windows-mobile-653-developer-toolkit.html' title='Windows Mobile 6.5.3 Developer Toolkit Released'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-385530392491169119</id><published>2010-02-16T13:37:00.012Z</published><updated>2010-02-17T02:52:59.615Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Phone 7 Series'/><title type='text'>Windows Phone 7 Series Announced at MWC</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qzgJfc4bI/AAAAAAAAAak/KccyA7MzKUs/s1600-h/windows+phone+7+series_1.jpg"&gt;&lt;img style="WIDTH: 127px; HEIGHT: 240px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5438856864888316338" border="0" alt="" src="http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qzgJfc4bI/AAAAAAAAAak/KccyA7MzKUs/s400/windows+phone+7+series_1.jpg" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/_zq7uh-qGrLw/S3qzPkvl-0I/AAAAAAAAAac/7zSl057OLlM/s1600-h/windows+phone+7+series.gif"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 233px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5438856580146002754" border="0" alt="" src="http://4.bp.blogspot.com/_zq7uh-qGrLw/S3qzPkvl-0I/AAAAAAAAAac/7zSl057OLlM/s400/windows+phone+7+series.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;You've probably heard by now that Microsoft has announced Windows Phone 7 Series to the community on 15 Feb at the &lt;a href="http://www.mobileworldcongress.com/index.htm"&gt;Mobile World Congress&lt;/a&gt; conference in Barcelona by Steve Ballmer. The Microsoft official press release can be found &lt;a href="http://www.microsoft.com/presspass/press/2010/feb10/02-15MWC10PR.mspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have to say the platform looks awesome. It looks very Zune HD like which is partly to do with the fact that &lt;a href="http://www.microsoft.com/presspass/exec/joeb/"&gt;Joe Belfiore&lt;/a&gt; is on the design team.&lt;br /&gt;&lt;br /&gt;The best publicly available video to date that shows the platform UX is over on channel9 here:&lt;br /&gt;&lt;a href="http://channel9.msdn.com/posts/LauraFoy/First-Look-Windows-Phone-7-Series-Hands-on-Demo/"&gt;http://channel9.msdn.com/posts/LauraFoy/First-Look-Windows-Phone-7-Series-Hands-on-Demo/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Dev Story:&lt;/strong&gt;&lt;br /&gt;If you're expecting to hear about the developer story or anything to do with the application platform then you'll be disappointed. Microsoft has not made any thing public regarding tools, frameworks etc for the new wave of Windows Phone 7 Series products. Microsoft is gearing up to tell the community about the developer story at &lt;a href="http://live.visitmix.com/"&gt;MIX&lt;/a&gt; in Las Vegas on March 15-17. For sessions on Windows Phone 7 Series at this event see &lt;a href="http://live.visitmix.com/Sessions#/tags/WindowsPhone"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For developer story announcements keep an eye on &lt;a href="http://blogs.msdn.com/ckindel/default.aspx"&gt;Charlie Kindels'&lt;/a&gt; blog as he is responsible for the Windows Phone 7 Series application platform.&lt;br /&gt;&lt;br /&gt;The Windows team blog has a post on the announcement &lt;a href="http://windowsteamblog.com/blogs/windowsphone/archive/2010/02/15/windows-phone-7-series-show-and-tell.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The Windows Phone twitter hashtag is: #wm7&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-385530392491169119?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/385530392491169119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=385530392491169119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/385530392491169119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/385530392491169119'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/windows-phone-7-series-announced-at-mwc.html' title='Windows Phone 7 Series Announced at MWC'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qzgJfc4bI/AAAAAAAAAak/KccyA7MzKUs/s72-c/windows+phone+7+series_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4460427547940115205</id><published>2010-02-16T13:37:00.003Z</published><updated>2010-02-16T13:41:42.596Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>In Seattle at Summit</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qgLfFXqsI/AAAAAAAAAaU/bsXj2GKFync/s1600-h/Seattle_Washington__Space_Needle_thu.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 277px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5438835619186322114" border="0" alt="" src="http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qgLfFXqsI/AAAAAAAAAaU/bsXj2GKFync/s400/Seattle_Washington__Space_Needle_thu.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So it's that time of year again, I'm at the MVP Summit 2010 this year and looking forward to it as there are many new and exciting technologies being released out of Redmond.&lt;br /&gt;&lt;br /&gt;I will post the stuff I can here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4460427547940115205?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4460427547940115205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4460427547940115205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4460427547940115205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4460427547940115205'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2010/02/in-seattle-at-summit.html' title='In Seattle at Summit'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_zq7uh-qGrLw/S3qgLfFXqsI/AAAAAAAAAaU/bsXj2GKFync/s72-c/Seattle_Washington__Space_Needle_thu.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8606990416737827959</id><published>2009-10-30T21:14:00.004Z</published><updated>2009-10-30T21:24:47.473Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><title type='text'>Writing designer friendly controls for Windows Mobile</title><content type='html'>One thing that you sometimes need when writing Visual Studio designer friendly controls for Windows Mobile, is knowing if your code is running in design time - which is essentially running on the desktop or not. You need to know this because if you are running on the desktop (design time) you don't want to call device specific dlls.&lt;br /&gt;&lt;br /&gt;The following code can be used to determine this:&lt;pre&gt;public static class DesignMode&lt;br /&gt;{&lt;br /&gt;    private static byte _mode = 255;&lt;br /&gt;&lt;br /&gt;    public static bool IsTrue&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            if (_mode == 255)&lt;br /&gt;                _mode = AppDomain.CurrentDomain.FriendlyName.Contains("DefaultDomain")&lt;br /&gt;                    ? (byte)1 : (byte) 0;&lt;br /&gt;            return _mode == 1;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;So essentially you can then code in your application:&lt;pre&gt;if (DesignMode.IsTrue)&lt;br /&gt;{&lt;br /&gt;    //don't call coredll.dll&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;    //call coredll.dll&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8606990416737827959?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8606990416737827959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8606990416737827959' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8606990416737827959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8606990416737827959'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/10/writing-designer-friendly-controls.html' title='Writing designer friendly controls for Windows Mobile'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2204627505336380733</id><published>2009-09-24T21:05:00.002Z</published><updated>2009-09-24T21:06:29.227Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zune HD'/><title type='text'>Zune HD</title><content type='html'>Review by WMExperts on the new Zune HD, very cool indeed:&lt;br /&gt;&lt;br /&gt;&lt;object id="viddler" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="333"&gt;&lt;param name="_cx" value="11562"&gt;&lt;param name="_cy" value="8810"&gt;&lt;param name="FlashVars" value=""&gt;&lt;param name="Movie" value="http://www.viddler.com/player/2e214d69/"&gt;&lt;param name="Src" value="http://www.viddler.com/player/2e214d69/"&gt;&lt;param name="WMode" value="Window"&gt;&lt;param name="Play" value="-1"&gt;&lt;param name="Loop" value="-1"&gt;&lt;param name="Quality" value="High"&gt;&lt;param name="SAlign" value=""&gt;&lt;param name="Menu" value="-1"&gt;&lt;param name="Base" value=""&gt;&lt;param name="AllowScriptAccess" value="always"&gt;&lt;param name="Scale" value="ShowAll"&gt;&lt;param name="DeviceFont" value="0"&gt;&lt;param name="EmbedMovie" value="0"&gt;&lt;param name="BGColor" value=""&gt;&lt;param name="SWRemote" value=""&gt;&lt;param name="MovieData" value=""&gt;&lt;param name="SeamlessTabbing" value="1"&gt;&lt;param name="Profile" value="0"&gt;&lt;param name="ProfileAddress" value=""&gt;&lt;param name="ProfilePort" value="0"&gt;&lt;param name="AllowNetworking" value="all"&gt;&lt;param name="AllowFullScreen" value="true"&gt;&lt;embed src="http://www.viddler.com/player/2e214d69/" width="437" height="333" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" name="viddler"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2204627505336380733?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2204627505336380733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2204627505336380733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2204627505336380733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2204627505336380733'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/09/zune-hd.html' title='Zune HD'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1767935360481591665</id><published>2009-06-18T21:49:00.002Z</published><updated>2009-06-18T21:51:50.840Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>TechNet UK Virtual Conference 2009</title><content type='html'>Another virtual conference will be taking place tomorrow (Friday 19th June) which is the TechNet UK Virtual Conference.&lt;br /&gt;&lt;br /&gt;Please find more information here: &lt;a href="http://technet.microsoft.com/en-gb/dd819085.aspx"&gt;http://technet.microsoft.com/en-gb/dd819085.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1767935360481591665?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1767935360481591665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1767935360481591665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1767935360481591665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1767935360481591665'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/06/technet-uk-virtual-conference-2009.html' title='TechNet UK Virtual Conference 2009'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-5306508476817949972</id><published>2009-06-14T08:05:00.007Z</published><updated>2009-06-14T09:56:11.886Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><title type='text'>DbDataReader.DoesColumnExist</title><content type='html'>Have you ever wanted to code something like the following:&lt;pre&gt;var dbCommand = Database.DbProviderFactory.CreateCommand();&lt;br /&gt;dbCommand.CommandText = "select * from MyTable";&lt;br /&gt;var reader = Database.ExecuteReader(dbCommand, null);&lt;br /&gt;if (reader.Read())&lt;br /&gt;{&lt;br /&gt;   if (reader.DoesColumnExist("mycolumn")&lt;br /&gt;   {&lt;br /&gt;      //Then we know its safe to select the column.&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;You're probably thinking, why would I want to do that? well if you're building a generic data handler library and you don't know what columns have been selected but you know the columns that could be selected then it is very useful as using the indexer to return the data for the specified column will throw an exception if it doesn't exist.&lt;br /&gt;&lt;br /&gt;I thought this extension method solves this problem and would be useful for others:&lt;pre&gt;public static class DbDataReaderExtensions&lt;br /&gt;{&lt;br /&gt;    public static bool DoesColumnExist(this IDataReader reader, string column)&lt;br /&gt;    {&lt;br /&gt;        if (reader.IsNull())              throw new ArgumentNullException("reader");&lt;br /&gt;        if (string.IsNullOrEmpty(column)) throw new ArgumentNullException("column");&lt;br /&gt;            &lt;br /&gt;        for (var i = 0; i &lt; reader.FieldCount; i++)&lt;br /&gt;        {&lt;br /&gt;            if (reader.GetName(i).Equals(column))&lt;br /&gt;                return true;&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;It's relatively straight forward but saves you from writing the same piece of code over and over again.&lt;br /&gt;&lt;br /&gt;The unit test class for this is as follows:&lt;pre&gt;[TestClass]&lt;br /&gt;public class DataReaderExtensionsTests&lt;br /&gt;{&lt;br /&gt;    [TestMethod]&lt;br /&gt;    public void ThrowsIfNullReaderIsPassed()&lt;br /&gt;    {&lt;br /&gt;        const MockDbDataReader reader = null;&lt;br /&gt;        AssertExt.Throws&amp;lt;ArgumentNullException&amp;gt;(() =&gt; reader.DoesColumnExist("foo"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [TestMethod]&lt;br /&gt;    public void ThrowsIfNullColumnIsPassed()&lt;br /&gt;    {&lt;br /&gt;        var reader = new MockDbDataReader();&lt;br /&gt;        AssertExt.Throws&amp;lt;ArgumentNullException&amp;gt;(() =&gt; reader.DoesColumnExist(null));&lt;br /&gt;        AssertExt.Throws&amp;lt;ArgumentNullException&amp;gt;(() =&gt; reader.DoesColumnExist(string.Empty));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [TestMethod]&lt;br /&gt;    public void ValidExists()&lt;br /&gt;    {&lt;br /&gt;        var reader = new MockDbDataReader();&lt;br /&gt;        Assert.IsTrue(reader.DoesColumnExist("One"));&lt;br /&gt;        Assert.IsTrue(reader.DoesColumnExist("Two"));&lt;br /&gt;        Assert.IsTrue(reader.DoesColumnExist("Three"));&lt;br /&gt;        Assert.IsTrue(reader.DoesColumnExist("Four"));&lt;br /&gt;        Assert.IsTrue(reader.DoesColumnExist("Five"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [TestMethod]&lt;br /&gt;    public void InvalidExists()&lt;br /&gt;    {&lt;br /&gt;        var reader = new MockDbDataReader();&lt;br /&gt;        Assert.IsFalse(reader.DoesColumnExist("foo"));&lt;br /&gt;        Assert.IsFalse(reader.DoesColumnExist("bar"));&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;You'll notice I have mocked the DbDataReader. Because there are mocking frameworks on the Compact Framework and probably will not be for some time (due to CF limitations) I have created a mocked class implementing the IDataReader interface. This mock class looks like the following:&lt;pre&gt;public class MockDbDataReader : IDataReader&lt;br /&gt;{&lt;br /&gt;    readonly Dictionary&amp;lt;int, string&amp;gt; getName = new Dictionary&amp;lt;int, string&amp;gt;();&lt;br /&gt;    public MockDbDataReader()&lt;br /&gt;    {&lt;br /&gt;        getName.Add(0, "One");&lt;br /&gt;        getName.Add(1, "Two");&lt;br /&gt;        getName.Add(2, "Three");&lt;br /&gt;        getName.Add(3, "Four");&lt;br /&gt;        getName.Add(4, "Five");&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region IDataReader Members&lt;br /&gt;&lt;br /&gt;    public void Close()&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int Depth&lt;br /&gt;    {&lt;br /&gt;        get { throw new NotImplementedException(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public DataTable GetSchemaTable()&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool IsClosed&lt;br /&gt;    {&lt;br /&gt;        get { throw new NotImplementedException(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool NextResult()&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool Read()&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int RecordsAffected&lt;br /&gt;    {&lt;br /&gt;        get { throw new NotImplementedException(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    #region IDisposable Members&lt;br /&gt;&lt;br /&gt;    public void Dispose()&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    #region IDataRecord Members&lt;br /&gt;&lt;br /&gt;    public int FieldCount&lt;br /&gt;    {&lt;br /&gt;        get { return 5; }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool GetBoolean(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public byte GetByte(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public char GetChar(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public IDataReader GetData(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public string GetDataTypeName(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public DateTime GetDateTime(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public decimal GetDecimal(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public double GetDouble(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Type GetFieldType(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public float GetFloat(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public Guid GetGuid(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public short GetInt16(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int GetInt32(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public long GetInt64(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public string GetName(int i)&lt;br /&gt;    {&lt;br /&gt;        return getName.ContainsKey(i) ? getName[i] : string.Empty;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int GetOrdinal(string name)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public string GetString(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public object GetValue(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int GetValues(object[] values)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public bool IsDBNull(int i)&lt;br /&gt;    {&lt;br /&gt;        throw new NotImplementedException();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public object this[string name]&lt;br /&gt;    {&lt;br /&gt;        get { throw new NotImplementedException(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public object this[int i]&lt;br /&gt;    {&lt;br /&gt;        get { throw new NotImplementedException(); }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;}&lt;/pre&gt;All we have done is returned 5 for the FieldCount, then provided some data so when GetName() is called we return the relevant item in the dictionary to resemble a real data reader object.&lt;br /&gt;&lt;br /&gt;We could have written an integration test but this is pointless as we know the DataReader class has been tested and works.&lt;br /&gt;&lt;br /&gt;The unit test class above gives 100% code coverage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-5306508476817949972?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/5306508476817949972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=5306508476817949972' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5306508476817949972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/5306508476817949972'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/06/dbdatareaderdoescolumnexist.html' title='DbDataReader.DoesColumnExist'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1419966082446861403</id><published>2009-06-04T16:00:00.004Z</published><updated>2009-06-04T16:09:13.599Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>JP Morgan Chase &amp; Co. Corporate Challenge</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.jpmorganchasecc.com/images/jp_logo_right.gif"&gt;&lt;img style="cursor: pointer; width: 177px; height: 186px;" src="http://www.jpmorganchasecc.com/images/jp_logo_right.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hitachi Consulting (including me) is participating in the JP Morgan Chase &amp;amp; Co. Corporate Challenge which is a world wide fundraising event in most major cities throughout the world.&lt;br /&gt;&lt;br /&gt;Hitachi Consulting's goal is to raise £1000 for the Down's Syndrome Association &lt;span style="font-size: 11pt; font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;and the challenge is a 6.5km run around Battersea park in London on the 9th July 2009.&lt;br /&gt;&lt;br /&gt;If you were feeling generious :)  you can sponsor the us over at:   &lt;p class="MsoNormal"&gt;&lt;a href="http://www.justgiving.com/hcukjpmorganchallenge2009" target="_blank"&gt;http://www.justgiving.com/hcukjpmorganchallenge2009&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/38895959-1419966082446861403?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1419966082446861403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1419966082446861403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1419966082446861403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1419966082446861403'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/06/jp-morgan-chase-co-corporate-challenge.html' title='JP Morgan Chase &amp; Co. Corporate Challenge'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-8524492668149726722</id><published>2009-05-23T09:08:00.005Z</published><updated>2009-05-23T09:13:54.538Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><title type='text'>Microsoft patterns &amp; practices Summit 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.msdn.microsoft.com/bb190332.3a%28en-us,MSDN.10%29.png"&gt;&lt;img style="cursor: pointer; width: 249px; height: 64px;" src="http://i.msdn.microsoft.com/bb190332.3a%28en-us,MSDN.10%29.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Microsoft are hosting the patterns &amp;amp; practices Summit Oct 12th - 16th 2009 at the Microsoft Conference Centre on Microsoft Campus in Redmond, WA.&lt;br /&gt;&lt;br /&gt;To learn more about this event, see here: &lt;a href="http://msdn.microsoft.com/en-us/practices/dd578307.aspx"&gt;http://msdn.microsoft.com/en-us/practices/dd578307.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-8524492668149726722?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/8524492668149726722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=8524492668149726722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8524492668149726722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/8524492668149726722'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/05/microsoft-patterns-practices-summit.html' title='Microsoft patterns &amp; practices Summit 2009'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-6333174928226891504</id><published>2009-05-09T10:47:00.006Z</published><updated>2009-05-09T14:03:38.800Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Events'/><category scheme='http://www.blogger.com/atom/ns#' term='Speaking'/><title type='text'>Microsoft Architect Insight Conference May 8th 2009 Mobile Decks for download</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.msdn.microsoft.com/dd135209.header%28en-gb,MSDN.10%29.jpg"&gt;&lt;img style="cursor: pointer; width: 1000px; height: 172px;" src="http://i.msdn.microsoft.com/dd135209.header%28en-gb,MSDN.10%29.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As promised to the delegates at the recent &lt;a href="http://msdn.microsoft.com/en-gb/architecture/dd135209.aspx"&gt;Microsoft Architect Insight  Conference&lt;/a&gt; held on 8th May 2009 at Microsoft London Victoria, I have uploaded the  decks from my breakout which was presented with Dave Baker from the Developer and Platform Group at  Microsoft and my interactive session for download.&lt;br /&gt;&lt;br /&gt;The two decks were used in the sessions &lt;span style="font-weight: bold;"&gt;Extending the  Enterprise through Mobile&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Mobile Implementation Patterns&lt;/span&gt;. Please note: the  interactive Mobile Implementation Patterns deck is very light and the session  was very much a chalk and talk session. I opened it up for debate for just about  anything mobile. This deck contains some information about Hitachi Consulting  who we are, our clients we've worked with which may interest you.&lt;br /&gt;&lt;br /&gt;Thanks to Dave for giving a great session and also thanks  to all the delegates in the interactive who made it a good discussion session.&lt;br /&gt;&lt;br /&gt;You can download the decks &lt;a href="https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=MobileAIC2009&amp;amp;ReleaseId=2650"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-6333174928226891504?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/6333174928226891504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=6333174928226891504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6333174928226891504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/6333174928226891504'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/05/microsoft-architecture-insight.html' title='Microsoft Architect Insight Conference May 8th 2009 Mobile Decks for download'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1302652536281817765</id><published>2009-04-13T10:31:00.008Z</published><updated>2009-04-15T20:01:42.679Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit testing'/><title type='text'>Copying dependency files to the output directory when running unit tests with MSTest</title><content type='html'>A rather long title don't you think :) But have you ever wanted to write a unit test using Visual Studio Test Edition and MSTest to have a dependency on configuration files other than app.config to fulfill your test?&lt;br /&gt;&lt;br /&gt;This post is mainly about test support for device testing but is the same for desktop testing too.&lt;br /&gt;&lt;br /&gt;Now, most people use &lt;span style="font-family:courier new;"&gt;app.config&lt;/span&gt; as a configuration file in .NET for desktop applications. On devices, &lt;span style="font-family:courier new;"&gt;System.Configuration&lt;/span&gt; is not supported. So some device developers end up writing there own configuration reader by serializing the XML into an object. Alternatively they use the class from OpenNETCF SDF or they might parse the XML using LINQ to XML or plain old System.Xml.&lt;br /&gt;&lt;br /&gt;Personally I tend to use the serialization option. My configuration files are not named &lt;span style="font-family:courier new;"&gt;app.config&lt;/span&gt; I tend to name them something more specific. You'll find Visual Studio or the test engine does not deploy any other file to the tests Output directory, even if you set properties &lt;span style="font-family:courier new;"&gt;Build Action&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;Content&lt;/span&gt; and &lt;span style="font-family:courier new;"&gt;Copy to Output Directory&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;Copy always&lt;/span&gt;. Running your test will fail if you have a dependency on the given configuration file as Visual Studio will not deploy the custom configuration file. It is highly likely most desktop developers have never seen this or unaware this limitation exists because most desktop devs use &lt;span style="font-family:courier new;"&gt;app.config&lt;/span&gt;. In most cases for desktop devs there is no problem.&lt;br /&gt;&lt;br /&gt;So how do device guys get around this problem?  You can use the same technique as the Mobile p&amp;amp;p team do with the &lt;span style="font-family:courier new;"&gt;DataAccess&lt;/span&gt; block which forms part of the recent Mobile Application Blocks drop: &lt;a href="http://www.codeplex.com/Mobile"&gt;http://www.codeplex.com/Mobile&lt;/a&gt;.  In one of there test projects they have a mock database dependency that is tested on the desktop but need a sample database to test against.&lt;br /&gt;They set the &lt;span style="font-family:courier new;"&gt;Build Action&lt;/span&gt; to &lt;span style="font-family:courier new;"&gt;Embedded Resource&lt;/span&gt; then they use reflection to unpack it. You might think this is quite a bit of work, but they have a reusable class named &lt;span style="font-family:courier new;"&gt;TestResourceFile&lt;/span&gt; that belongs to the &lt;span style="font-family:courier new;"&gt;TestUtilities&lt;/span&gt; project. Using this class does all the unpacking for you.&lt;br /&gt;&lt;br /&gt;The code to copy this dependency could look like the following (I've taken this from the p&amp;amp;p Mobile codebase):&lt;pre&gt;private TestResourceFile CreateDbFile()&lt;br /&gt;{&lt;br /&gt;    dbFile = new TestResourceFile(this, "MockDatastore.sdf");&lt;br /&gt;    connectionString = String.Format(connectionStringPattern, dbFile.Filename);&lt;br /&gt;    return dbFile;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[TestMethod]&lt;br /&gt;public void ThrowsIfNullParameterNameIsPassed()&lt;br /&gt;{&lt;br /&gt;   using (TestResourceFile file = CreateDbFile())&lt;br /&gt;   {&lt;br /&gt;      using (Database database = new SqlDatabase(connectionString))&lt;br /&gt;      {&lt;br /&gt;         Database service = new SqlDatabase(connectionString);&lt;br /&gt;         ExtendedAssert.Throws&lt;argumentnullexception&gt;(&lt;br /&gt;         delegate { DbParameter param = service.CreateParameter(null, "Maria Anders"); });&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;}&lt;/argumentnullexception&gt;&lt;/pre&gt;But even still there is a better way to solve this problem and that is to use the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute%28VS.80%29.aspx"&gt;DeploymentItemAttribute&lt;/a&gt; class. It's use is simple. The following code illustrates it use:&lt;pre&gt;[DeploymentItem("Mobile.DataMapper.config")]&lt;br /&gt;[TestClass]&lt;br /&gt;public class DataContextFactoryTests&lt;br /&gt;{&lt;br /&gt;}&lt;/pre&gt;The above code will copy the file "Mobile.DataMapper.config" to the test output directory. You need to ensure to set the file properties &lt;span style="font-family: courier new;"&gt;Build Action&lt;/span&gt; to &lt;span style="font-family: courier new;"&gt;Content&lt;/span&gt; and &lt;span style="font-family: courier new;"&gt;Copy to Output Directory&lt;/span&gt; to &lt;span style="font-family: courier new;"&gt;Copy always&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've got to say thanks to Chris Tacke for telling me about this attribute class.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1302652536281817765?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1302652536281817765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1302652536281817765' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1302652536281817765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1302652536281817765'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/04/copying-dependency-files-to-output.html' title='Copying dependency files to the output directory when running unit tests with MSTest'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-4345923158292839958</id><published>2009-04-12T14:25:00.004Z</published><updated>2009-04-12T15:01:16.429Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>http://answers.microsoft.com</title><content type='html'>Microsoft has recently (last few months) announced and released a website for Windows Vista users to post questions here: &lt;a href="http://answers.microsoft.com/"&gt;http://answers.microsoft.com.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is quite a large MVP presence there to answer your Windows Vista questions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-4345923158292839958?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/4345923158292839958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=4345923158292839958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4345923158292839958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/4345923158292839958'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/04/answersmicrosoftcom.html' title='http://answers.microsoft.com'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-1311759651089410892</id><published>2009-04-10T21:44:00.002Z</published><updated>2009-04-10T21:50:00.677Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><category scheme='http://www.blogger.com/atom/ns#' term='Getting Started With WM'/><title type='text'>What type of applications can we build on Windows Mobile today - Part 3 of 10</title><content type='html'>This is part 3 of 10 of the &lt;a href="http://www.simonrhart.com/2009/02/windows-mobile-development-for.html"&gt;getting started with Windows Mobile development series&lt;/a&gt;. For previous posts in this series please see &lt;a href="http://www.simonrhart.com/2009/02/windows-mobile-development-for.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today mobile development is getting easier. Many folks from the desktop can port there C# skills over and hit the ground running fairly quickly. The Compact Framework is maturing nicely. Development tools and emulators are getting more feature rich and more reliable.&lt;br /&gt;&lt;br /&gt;The types of applications you can build today for Windows Mobile - with regards to managed code fall into the following groups:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Microsoft .NET Compact Framework&lt;/span&gt;. This is a subset of the Microsoft .NET Frameworkdesigned specifically for mobile devices. Use this technology for mobile applications that must run on the device without guaranteed network connectivity. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ASP.NET Mobile&lt;/span&gt;. This is a subset of ASP.NET, designed specifically for mobile devices. ASP.NET Mobile applications can be hosted on a normal ASP.NET server. Use this technology for mobile Web applications when you need to support a large number of mobile devices and browsers that can rely on a guaranteed network connection.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;ASP.NET for Mobile no longer has designer support in Visual Studio 2008. You can simply use the desktop controls and they will render. Now with "6on6" which is IE 6 engine on Windows Mobile 6.1 this will make web development for mobile easier. You can test IE 6 with the recently released WM 6.1 emulators. I wrote a post on this here. One thing to bear in mind is of course screen size.&lt;br /&gt;&lt;br /&gt;Most developers write .NET Compact Framework applications over ASP.NET for LOB (Line of Business applications) due to the smart client nature. Also the power of a .NET CF application allows the developer to do whatever he wants. You can access the camera the GPS chipset the radio or the phone. You can access Outlook, manipulate appointments or add/change a contact. You can access a Relational Database Management system such as SQL Server Compact to store your applications data then sync back to SQL Server desktop using Sync Services (Sync Framework). You can write very compelling UI using GDI or on later devices GDI+ for support such as gradient backgrounds and transparency. XNA sadly is not supported, however DirectX is but is limited and memory intensive.&lt;br /&gt;&lt;br /&gt;The main power of using the .NET Compact Framework over any other technology is the fact that it is embedded and works great in smart client environments where connectivity is an issue.&lt;br /&gt;&lt;br /&gt;ASP.NET is rarely used in my experience, one reason is due to the connectivity issues. Under ASP.NET, mobile devices require a constant connection with the server in order for this type of architecture to work. Web applications do not work well in enterprise solutions for mobile devices. They do work well for consumer applications but not mission critical ones.&lt;br /&gt;&lt;br /&gt;You'll probably be thinking how do you architect an application for the .NET Compact Framework. Most developers adopt the Active record pattern for the business layer. This tends to work well as mobile applications tend not to be as complex as desktop applications. And now performance tends not to be so much of a problem as it once was. ORMs and Domain Driven Development with patterns such as the repository data access layer is not quite as good a story.&lt;br /&gt;&lt;br /&gt;The only ORM that supports the CF and SQL CE to date is LLBLGen. I am in the process of building an ORM for the Compact Framework and intend on writing an MSDN article how I did it.&lt;br /&gt;&lt;br /&gt;The CF 3.5 does support WCF as a consumer, ServiceHost is not supported. There are many binding and other limitations however. Usually the device will have its own domain that uses either a message protocol which can be completely bespoke over TCP or a service layer with standard DTOs via HTTP. Or in some cases Sync data directly using Sync Services or merge replication. Each application is different. Of course vanilla Web Services ASMX has been supported since CF 1.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-1311759651089410892?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/1311759651089410892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=1311759651089410892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1311759651089410892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/1311759651089410892'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/04/what-type-of-applications-can-we-build.html' title='What type of applications can we build on Windows Mobile today - Part 3 of 10'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-7353486712920109873</id><published>2009-04-06T21:46:00.003Z</published><updated>2009-04-06T21:50:09.322Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><title type='text'>Preview of Windows Mobile 6.5 at MIX</title><content type='html'>Checkout WM 6.5 by Loke Uei Tan (requires Silverlight). See other videos here: &lt;a href="http://videos.visitmix.com/MIX09/All"&gt;http://videos.visitmix.com/MIX09/All&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="960" height="540"&gt;&lt;br /&gt;&lt;param name="source" value="http://videos.visitmix.com/Skins/mixvideos/Styles/players/VideoPlayer2009_03_27.xap" /&gt;&lt;br /&gt;&lt;param name="initParams" value="m=http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t61f.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://videos.visitmix.com/Skins/mixvideos/Styles/players/VideoPlayer2009_03_27.xap, postid=0" /&gt;&lt;br /&gt;&lt;param name="background" value="#00FFFFFF" /&gt;&lt;br /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;br /&gt;&lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-7353486712920109873?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/7353486712920109873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=7353486712920109873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7353486712920109873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/7353486712920109873'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/04/preview-of-windows-mobile-65-at-mix.html' title='Preview of Windows Mobile 6.5 at MIX'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-38895959.post-2666033833409523789</id><published>2009-04-02T21:44:00.016Z</published><updated>2009-04-05T13:03:43.291Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Patterns and practices'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile and Embedded'/><title type='text'>An example of the Plugin pattern on the Compact Framework</title><content type='html'>I have been talking about IoC containers on the Compact Framework lately and thought I'd show an example of implementing a simpler example of separating concerns. There is another common pattern to which IoC I believe was derived called the Plugin pattern. &lt;br /&gt;&lt;br /&gt;The Plugin pattern is talked about by Martin Fowler in his Patterns Of Enterprise Application Architecture book (good book by the way). It is (in my opinion) a simpler solution to IoC but is a little more limited and doesn't usually involve a framework.&lt;br /&gt;&lt;br /&gt;I involves using reflection and creating a factory to create a type usually specified in a configuration file using a common interface. This pattern promotes &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;Aspect Oriented Programming&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As I am in the process of building a managed ORM for the Compact Framework, I decided to use the Plugin pattern for building the data context part of the API. I decided this because the Plugin is easy to implement and doesn't require any framework to implement. I wanted to keep the ORM as simple as possible while at the same time making the framework decoupled from the type of database desired.&lt;br /&gt;&lt;br /&gt;As mentioned I am using this pattern for the data context part of my ORM and I have a configuration file used to specify the type of database. Doing this enables me to easily change my database without having to rewrite a vast majority of my application. I don't even need to recompile my app. I can simply change the config and re-run my app.&lt;br /&gt;&lt;br /&gt;The configuration setting that specifies the database dialect looks like this:&lt;pre&gt;&amp;lt;property name="datacontext" value="Mobile.DataMapper.Dialect.SqlServerCe35DataContext"/&amp;gt;&lt;/pre&gt;The SqlServerCe35DataContext looks like:&lt;pre&gt;public class SqlServerCe35DataContext : DataContext&lt;br /&gt;{&lt;br /&gt;      private SqlDatabase _database;&lt;br /&gt;      private readonly MsSqlCe35Dialect _dialect;&lt;br /&gt;&lt;br /&gt;      public SqlServerCe35DataContext()&lt;br /&gt;      {&lt;br /&gt;          _dialect = new MsSqlCe35Dialect();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      internal override Database Database&lt;br /&gt;      {&lt;br /&gt;          get &lt;br /&gt;          { &lt;br /&gt;              if (_database == null) _database = new SqlDatabase(ConnectionString);&lt;br /&gt;              return _database;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      internal override Dialect Dialect&lt;br /&gt;      {&lt;br /&gt;          get { return _dialect; }&lt;br /&gt;      }&lt;br /&gt;}&lt;/pre&gt;The DataContext class contains the default implementation of SQL Server CE and is defined as an abstract class. It also implements the IDataContext interface which we use in our factory. This enables us to use the Plugin pattern successfully. &lt;br /&gt;&lt;br /&gt;Part of the DataContext class looks like this:&lt;pre&gt;public abstract class DataContext : IDataContext&lt;br /&gt;{&lt;br /&gt;    private DbTransaction _transaction;&lt;br /&gt;    private string _connectionString;&lt;br /&gt;&lt;br /&gt;    public virtual void Commit()&lt;br /&gt;    {&lt;br /&gt;        if (_transaction.IsNull()) throw new InvalidOperationException("There is no transaction for this session.");&lt;br /&gt;        _transaction.Commit();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public virtual void BeginTransaction()&lt;br /&gt;    {&lt;br /&gt;        _transaction = Database.GetConnection().BeginTransaction();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public virtual void BeginTransaction(IsolationLevel isolationLevel)&lt;br /&gt;    {&lt;br /&gt;        _transaction = Database.GetConnection().BeginTransaction(isolationLevel);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    internal abstract Database Database&lt;br /&gt;    { &lt;br /&gt;        get;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    internal abstract Dialect Dialect&lt;br /&gt;    {&lt;br /&gt;        get;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;I've omitted many memebers as it's not important what this class does. What is important is the implementation in order to implement this pattern for devices.&lt;br /&gt;&lt;br /&gt;For those interested, this is based on the Mobile Client Software Factory. I will be publishing the source code to my ORM for Windows Mobile soon - once finished.&lt;br /&gt;&lt;br /&gt;So as we saw, the DataContext is abstract and it contains an interface. Just so you can see, the interface looks like this: &lt;pre&gt;public interface IDataContext : IDisposable&lt;br /&gt;{&lt;br /&gt;    string ConnectionString { get; set; }&lt;br /&gt;&lt;br /&gt;    //Transaction management.&lt;br /&gt;    void Commit();&lt;br /&gt;    void Rollback();&lt;br /&gt;    bool IsInTransaction{ get;}&lt;br /&gt;    void BeginTransaction();&lt;br /&gt;    void BeginTransaction(IsolationLevel isolationLevel);&lt;br /&gt;&lt;br /&gt;    IList&amp;lt;TEntity&amp;gt; Read&amp;lt;TEntity&amp;gt;(QueryExpressionCollection queryExpressionCollection);&lt;br /&gt;    IList&amp;lt;TEntity&amp;gt; Read&amp;lt;TEntity&amp;gt;(QueryExpressionCollection &lt;br /&gt;      queryExpressionCollection, List&amp;lt;Func&amp;lt;ObjectProperty&amp;gt;&amp;gt; columnsInScope);&lt;br /&gt;    IList&amp;lt;TEntity&amp;gt; FindAll&amp;lt;TEntity&amp;gt;();&lt;br /&gt;    TEntity Read&amp;lt;TEntity&amp;gt;(object id);&lt;br /&gt;&lt;br /&gt;    int Delete&amp;lt;TEntity&amp;gt;(TEntity entity);&lt;br /&gt;    TEntity Save&amp;lt;TEntity&amp;gt;(TEntity entity);&lt;br /&gt;    string DatabaseName { get; set; }&lt;br /&gt;       &lt;br /&gt;}&lt;/pre&gt;As I said I omitted most of the above members from the DataContext class above for clarity as I want to focus on the architecture not implementation details for this post.&lt;br /&gt;&lt;br /&gt;So now we have four things:&lt;br /&gt;&lt;br /&gt;1. Configuration file that tells us what datacontext to use.&lt;br /&gt;2. The datacontext implementation (SQL CE Server) to use.&lt;br /&gt;3. The base datacontext class.&lt;br /&gt;4. The datacontext implementation.&lt;br /&gt;&lt;br /&gt;The only thing that is missing to put all this together so the consumer can just work with the interface (as the consumer doesn't care about where the data lives or how the data is retrieved) is the DataContextFactory.&lt;br /&gt;&lt;br /&gt;The Factory is very simple. It looks like this:&lt;pre&gt;public class DataContextFactory&lt;br /&gt;{&lt;br /&gt;    private IDataContext _instance;&lt;br /&gt;&lt;br /&gt;    public DataContextFactory()&lt;br /&gt;    {&lt;br /&gt;        CreateInstance(null);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public DataContextFactory(IDataMapperConfiguration dataMapperConfiguration)&lt;br /&gt;    {&lt;br /&gt;        CreateInstance(dataMapperConfiguration);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void CreateInstance(IDataMapperConfiguration dataMapperConfiguration)&lt;br /&gt;    {&lt;br /&gt;        if (dataMapperConfiguration == null) &lt;br /&gt;           dataMapperConfiguration = MapperFactory.CreateDataMapperConfiguration();&lt;br /&gt;        var dataContext = dataMapperConfiguration.DataContext;&lt;br /&gt;        var asm = Assembly.GetExecutingAssembly();&lt;br /&gt;        _instance = (IDataContext)asm.CreateInstance(dataContext.Value);&lt;br /&gt;        if (dataMapperConfiguration.HasConnectionString)&lt;br /&gt;            _instance.ConnectionString = dataMapperConfiguration.ConnectionString.Value;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public IDataContext GetDataContext&lt;br /&gt;    {&lt;br /&gt;        get&lt;br /&gt;        {&lt;br /&gt;            return _instance;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;Notice how we have another dependency the IDataMapperConfiguration. There's no need to document this code but quite simply it's a serialized object of the XML posted earlier. We get two things from this XML file 1. The ConnectionString and 2. The concrete DataContext class that implements DataContext. Notice how we set the ConnectionString property after the type has been created. We do this because the CF only supports one Assembly.CreateInstance method that accepts the type to create.&lt;br /&gt;&lt;br /&gt;So using this code from the consumer looks like this:&lt;pre&gt;IDataContext context = new DataContextFactory().GetDataContext;&lt;/pre&gt;then the consumer can work with this interface as opposed to the implementation. The consumer knows nothing about the underlying database or storage. If you changed the database from Sql CE to SQLLite for example, it is a simple case of changing the configuration file, then re-running the app.&lt;br /&gt;&lt;br /&gt;You could implement this architecture with the IoC framework and using dependency injection pattern but the current one developed by the p&amp;p team at Microsoft doesn't have support for configuration files. This means you'd have to recompile your app anytime you change the DataContext implementor. Now, no doubt Microsoft will roll out another version that supports configuration files in the future as the ContainerModel is a fairly early drop.&lt;br /&gt;&lt;br /&gt;So the benefit with this implementation is, it's really really easy to implement and doesn't require any framework. If the implementors existed in another assembly, you could easily change the DataContextFactory to use the LoadFrom method to load a given assembly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/38895959-2666033833409523789?l=www.simonrhart.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.simonrhart.com/feeds/2666033833409523789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=38895959&amp;postID=2666033833409523789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2666033833409523789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/38895959/posts/default/2666033833409523789'/><link rel='alternate' type='text/html' href='http://www.simonrhart.com/2009/04/example-of-plugin-pattern-on-compact.html' title='An example of the Plugin pattern on the Compact Framework'/><author><name>Simon Hart</name><uri>http://www.blogger.com/profile/08526568682625258690</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://bp3.blogger.com/_zq7uh-qGrLw/SBuKu52LWvI/AAAAAAAAAGs/id6kYLmhBpk/S220/MyMvpPhoto.jpg'/></author><thr:total>0</thr:total></entry></feed>
