<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://mehranikoo.net/CS/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Mehran Nikoo&amp;#39;s Notes</title><subtitle type="html">on Software Architecture, ALM and .NET Framework</subtitle><id>http://mehranikoo.net/CS/atom.aspx</id><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/default.aspx" /><link rel="self" type="application/atom+xml" href="http://mehranikoo.net/CS/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2009-01-08T08:31:00Z</updated><entry><title>Unshelving a Shelveset to a Different Branch in TFS</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/07/07/Unshelving_5F00_a_5F00_Shelveset_5F00_To_5F00_a_5F00_Different_5F00_Branch_5F00_in_5F00_TFS.aspx" /><id>http://mehranikoo.net/CS/archive/2009/07/07/Unshelving_5F00_a_5F00_Shelveset_5F00_To_5F00_a_5F00_Different_5F00_Branch_5F00_in_5F00_TFS.aspx</id><published>2009-07-07T13:53:00Z</published><updated>2009-07-07T13:53:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#000000&gt;[Note: In this post,&amp;nbsp;I am assuming that you are familiar with the &lt;A href="http://tfsbranchingguideii.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20785" mce_href="http://tfsbranchingguideii.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=20785"&gt;TFS Branching Guidance&lt;/A&gt;.&amp;nbsp;If you haven't read the guide, I strongly recommend that you do so! &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&lt;FONT color=#000000&gt;I will be referring to the branch names suggested for the basic branch plan.]&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;Scenario:&lt;/FONT&gt;&lt;/STRONG&gt; After an application is released to the production environment, a defect has been raised by the users. The&amp;nbsp;production support team decides to fix this defect before the next version is released so they start by modifying the appropriate&amp;nbsp;files in the REL branch to fix the defect. When the developer working on the defect finishes his job, he shelves those changes and asks the support team lead to review those changes before they are checked in. The support team lead analyses the changes and because of the risks involved, she talks to the users and they agree to wait until the release of the next version to get the fix.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;Challenge:&lt;/FONT&gt;&lt;/STRONG&gt; When you create a shelveset, the server path of each shelved file&amp;nbsp;is stored with the shelveset so when you try to unshelve that shelveset, the files in the same branch are modified. You cannot unshelve the shelveset to a different branch such as &lt;FONT color=#000000&gt;DEV&lt;/FONT&gt;&amp;nbsp;so you will need to do this manually by unshelving to the original branch and then manually copying the modified files across, which is time consuming and error prone.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;Solution: &lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBD14EEA-781F-45A1-8C46-9F6BA2F68BF0&amp;amp;displaylang=en"&gt;TFS 2008 Power Tools&lt;/A&gt; includes a command line&amp;nbsp;tool&amp;nbsp;(TFPT.exe), which allows you to perform advanced operations in TFS. One of these operations is&amp;nbsp;the unshelve command, which&amp;nbsp;allows you to change the server path of the files in a shelveset during the unshelve operation. This means you can use this command to unshelve&amp;nbsp;any shelveset to a different branch. In our scenario, the shelveset was originally created in the REL branch so the development team can use the TFPT tool to&amp;nbsp;unshelve the&amp;nbsp;shelveset to the &lt;FONT color=#000000&gt;DEV&lt;/FONT&gt; branch.&lt;/P&gt;
&lt;P mce_keep="true"&gt;So let's assume that the support team have changed the source files in the REL branch&amp;nbsp;and we&amp;nbsp;want to unshelve this shelveset to the DEV branch. In order to do this, we need to:&lt;/P&gt;
&lt;P mce_keep="true"&gt;- Make sure the TFPT command line tool is installed!&lt;BR&gt;- Go to the command prompt and change the folder to a location that is mapped in the desired workspace.&lt;BR&gt;- Run the following command:&lt;BR&gt;&lt;FONT face="courier new,courier"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TFPT.exe unshelve &lt;STRONG&gt;ReleaseHotFix1&lt;/STRONG&gt; /migrate /source:&lt;STRONG&gt;$/MyProject/REL&lt;/STRONG&gt; /target:&lt;STRONG&gt;$/MyProject/DEV&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Where &lt;FONT face="courier new,courier"&gt;&lt;STRONG&gt;ReleaseHotFix1&lt;/STRONG&gt;&lt;/FONT&gt; is the original shelveset name and &lt;FONT face="courier new,courier"&gt;&lt;STRONG&gt;$/MyProject/REL&lt;/STRONG&gt;&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;&lt;STRONG&gt;$/MyProject/DEV&lt;/STRONG&gt;&lt;/FONT&gt; are the server paths to the REL and DEV branches respectively.&lt;/P&gt;
&lt;P mce_keep="true"&gt;When you run the unshelve command with the migrate option, the tool will prompt you to choose which version of the file (in origin or target) you want to keep. It will also allow you to perform a file merge if needed, which will be done in the merge tool. &lt;/P&gt;
&lt;P mce_keep="true"&gt;The following diagram shows the sequence of events that need to happen across multiple branches in our scenario:&lt;/P&gt;
&lt;P align=center mce_keep="true"&gt;&lt;IMG style="WIDTH: 729px; HEIGHT: 182px" src="http://mehranikoo.net/images/blog/DevProcess/UnshleveToAnotherBranch.jpg" width=684 height=174&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Events:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;S1: Production support team shelve their changes in the REL branch.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;U1: Development team unshelve the shelveset&amp;nbsp;to the DEV branch by running the TFPT tool and using the shelveset migrate option.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;C1: After resolving any potential conflicts in the DEV branch,&amp;nbsp;the&amp;nbsp;modified files are&amp;nbsp;checked in.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;RI1: At some point, the checked-in changeset will be&amp;nbsp;reverse integrated (merged) back into the MAIN branch.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=62611" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Development Process" scheme="http://mehranikoo.net/CS/archive/tags/Development+Process/default.aspx" /><category term=".NET Framework" scheme="http://mehranikoo.net/CS/archive/tags/.NET+Framework/default.aspx" /><category term="Visual Studio 2008" scheme="http://mehranikoo.net/CS/archive/tags/Visual+Studio+2008/default.aspx" /><category term="MSArchitectPortal" scheme="http://mehranikoo.net/CS/archive/tags/MSArchitectPortal/default.aspx" /></entry><entry><title>Microsoft's Mega Data Centre in Dublin Now Online</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/07/07/Microsoft_2700_s_5F00_Mega_5F00_Data_5F00_Centre_5F00_in_5F00_Dublin_5F00_Now_5F00_Online.aspx" /><id>http://mehranikoo.net/CS/archive/2009/07/07/Microsoft_2700_s_5F00_Mega_5F00_Data_5F00_Centre_5F00_in_5F00_Dublin_5F00_Now_5F00_Online.aspx</id><published>2009-07-06T23:36:00Z</published><updated>2009-07-06T23:36:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Windows Azure and some other components&amp;nbsp;of the &lt;A href="http://www.microsoft.com/azure/default.mspx" mce_href="http://www.microsoft.com/azure/default.mspx"&gt;Azure Services Platform&lt;/A&gt; are expected to be commercially available later in 2009. Clearly, one of the key components required for reaching this milestone is the physical hardware, networking&amp;nbsp;equipment and the supporting services such as power generation and cooling,&amp;nbsp;something that we refer to as "Global Foundation Services". &lt;/P&gt;
&lt;P mce_keep="true"&gt;On Wednesday last week (1 July 2009), a Generation 3 data centre outside the US was brought online in Dublin. This data centre will be used to host various services including Azure service hosting and additional live and online services. There is also another data centre in Chicago, which is planned to go online on 20 July. You can &lt;A href="http://blogs.technet.com/msdatacenters/archive/2009/06/29/microsoft-brings-two-more-mega-data-centers-online-in-july.aspx" mce_href="http://blogs.technet.com/msdatacenters/archive/2009/06/29/microsoft-brings-two-more-mega-data-centers-online-in-july.aspx"&gt;read more about this new development&lt;/A&gt; on &lt;A href="http://blogs.technet.com/msdatacenters/default.aspx" mce_href="http://blogs.technet.com/msdatacenters/default.aspx"&gt;Microsoft Data Centers Blog&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=62711" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Windows Azure" scheme="http://mehranikoo.net/CS/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Spanish (United States) Locale</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/06/29/Spanish_5F00_United_5F00_States_5F00_Locale.aspx" /><id>http://mehranikoo.net/CS/archive/2009/06/29/Spanish_5F00_United_5F00_States_5F00_Locale.aspx</id><published>2009-06-29T10:09:00Z</published><updated>2009-06-29T10:09:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Last week, I had a enquiry from a customer about the Spanish locale for the United States. As he mentioned, it does make sense to have this locale, especially for the users based in the southern regions of the US. If you are running Windows XP or Windows Server 2003, there is no such locale supported by the operating system so if you try to access this locale in a managed application by writing this line of code:&lt;BR&gt;&lt;FONT size=2&gt;&lt;FONT face="courier new,courier"&gt;&lt;BR&gt;System.Globalization.&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;FONT color=#2b91af&gt;&lt;FONT color=#2b91af&gt;CultureInfo&lt;/FONT&gt;&lt;/FONT&gt; cultureInfo = &lt;FONT color=#0000ff&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;/FONT&gt; System.Globalization.&lt;FONT color=#2b91af&gt;&lt;FONT color=#2b91af&gt;CultureInfo&lt;/FONT&gt;&lt;/FONT&gt;(&lt;FONT color=#a31515&gt;&lt;FONT color=#a31515&gt;"es-US"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=3&gt;);&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=+0&gt;&lt;FONT size=2&gt;you will get an ArgumentException, which says: "Culture name 'es-US' is not supported".&amp;nbsp;As a workaround, you can&amp;nbsp;use the "es-MX" locale or create your own locale.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;But the good news is that the support for the "es-US" locale was added in Windows Vista and Windows Server 2008 so if you are running one of these operating systems, you can now use the es-US locale (LCID = 21514) and the same line of code we used above will work fine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;A href="http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx" mce_href="http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx"&gt;This page&lt;/A&gt; has a complete list of the&amp;nbsp;locale IDs assigned by Microsoft so if you thinking of creating your own locale, check this list first to make sure there is no conflict with the existing locales.&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=62428" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term=".NET Framework" scheme="http://mehranikoo.net/CS/archive/tags/.NET+Framework/default.aspx" /><category term="Windows Vista" scheme="http://mehranikoo.net/CS/archive/tags/Windows+Vista/default.aspx" /><category term="Windows Server 2008" scheme="http://mehranikoo.net/CS/archive/tags/Windows+Server+2008/default.aspx" /></entry><entry><title>VSTS 2010 Beta 1 Available for Download</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/05/18/VisualStudio2010Beta1AvailableForDownload.aspx" /><id>http://mehranikoo.net/CS/archive/2009/05/18/VisualStudio2010Beta1AvailableForDownload.aspx</id><published>2009-05-18T19:06:00Z</published><updated>2009-05-18T19:06:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;As planned,&amp;nbsp;VSTS 2010 Team Suite Beta 1, .NET Framework 4 Beta 1, TFS 2010 Beta 1 and VSTS 2010 Test Load Agent and Controller Beta 1 are now available for download from MSDN Subscribers area. &lt;/P&gt;
&lt;P mce_keep="true"&gt;We now have 32-bit and 64-bit support for TFS and the TFS client OM. All of the client tools such as Visual Studio will continue to run in 32-bit environment though. For more information on the supported environments for TFS and the improvements in&amp;nbsp;setup, administration and operations&amp;nbsp;refer to &lt;A href="http://blogs.msdn.com/bharry/archive/2009/04/30/tfs-2010-admin-operations-setup-improvements.aspx" mce_href="http://blogs.msdn.com/bharry/archive/2009/04/30/tfs-2010-admin-operations-setup-improvements.aspx"&gt;Brian Harry's post&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=61016" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Visual Studio 2010" scheme="http://mehranikoo.net/CS/archive/tags/Visual+Studio+2010/default.aspx" /><category term=".NET Framework 4.0" scheme="http://mehranikoo.net/CS/archive/tags/.NET+Framework+4.0/default.aspx" /></entry><entry><title>VSTS Web Test Recorder Bar Missing in Windows Vista/7 64-bit</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/02/19/VSTSWebTestRecorderBarMissingInWindowsVista_2D00_7_2D00_64bit.aspx" /><id>http://mehranikoo.net/CS/archive/2009/02/19/VSTSWebTestRecorderBarMissingInWindowsVista_2D00_7_2D00_64bit.aspx</id><published>2009-02-19T21:28:00Z</published><updated>2009-02-19T21:28:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Primarily for my own reference in the future&amp;nbsp;but you may find this useful too. If you are running Windows Vista/7 64-bit and want to use the VSTS 2008 Web Test Recorder plug-in, the web test&amp;nbsp;recorder bar may be unavailable due to the way Windows caches the list of available explorer bars. In order to resolve this, you can apply some tweaks to the registry. &lt;A href="http://blogs.msdn.com/mtaute" mce_href="http://blogs.msdn.com/mtaute"&gt;Michael Taute&lt;/A&gt; has a &lt;A href="http://blogs.msdn.com/mtaute/archive/2007/11/09/diagnosing-and-fixing-web-test-recorder-bar-issues.aspx" mce_href="http://blogs.msdn.com/mtaute/archive/2007/11/09/diagnosing-and-fixing-web-test-recorder-bar-issues.aspx"&gt;useful&amp;nbsp;post&lt;/A&gt; which explains the problem and solution in more detail and covers some other issues too.&lt;/P&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=57464" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Windows Vista" scheme="http://mehranikoo.net/CS/archive/tags/Windows+Vista/default.aspx" /><category term="Visual Studio 2008" scheme="http://mehranikoo.net/CS/archive/tags/Visual+Studio+2008/default.aspx" /><category term="Windows 7" scheme="http://mehranikoo.net/CS/archive/tags/Windows+7/default.aspx" /></entry><entry><title>Project and File References Revisited</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/02/10/ProjectAndFileReferencesRevisited.aspx" /><id>http://mehranikoo.net/CS/archive/2009/02/10/ProjectAndFileReferencesRevisited.aspx</id><published>2009-02-10T10:18:00Z</published><updated>2009-02-10T10:18:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Most .NET developers and architects&amp;nbsp;are familiar with various approaches to&amp;nbsp;Visual Studio solution design:&lt;/P&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Single Solution&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Partitioned Solution&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Multiple Solutions&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;STRONG&gt;Multiple Partitioned Solutions&amp;nbsp;&lt;/STRONG&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;P mce_keep="true"&gt;"What?&amp;nbsp;Haven't heard&amp;nbsp;of&amp;nbsp;"Multiple Partitioned Solutions" before. Did you just make it up?"&lt;/P&gt;
&lt;P mce_keep="true"&gt;Yes, you might be using it already but you didn't know what it's called. That's&amp;nbsp;fine&amp;nbsp;as I have come up with that name and haven't written about it before :)&amp;nbsp;So please read on!&lt;/P&gt;
&lt;P mce_keep="true"&gt;Most of the development projects contain&amp;nbsp;more than one Visual Studio project.&amp;nbsp;As soon as a second project is added to the solution, as a developer/architect, you start thinking about how the dependencies should look like. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Meet "Camp P"&lt;BR&gt;&lt;/STRONG&gt;Members of&amp;nbsp;camp P&amp;nbsp;believe file references are evil as they cause all sorts of versioning and build issues when the dependencies go out-of-date. The members of this camp try to put everything in the same solution and life is great as long as you can count the number of projects with your fingers. There has been a debate out there as to whether Visual Studio should become quicker when it comes to handling large solutions. This issue was partly addressed by release of Visual Studio 2005 SP1 where we introduced some performance improvements in the IDE. These improvements are also rolled forward&amp;nbsp;to Visual Studio 2008. However, you need to take into account all the work the IDE and the compiler need to do while you are typing in the IDE to&amp;nbsp;provide you with&amp;nbsp;Intellisense and compiler warnings/errors. So at some point, you will hit a practical limit on the number of projects you can have open in Visual Studio.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Meet "Camp F"&lt;BR&gt;&lt;/STRONG&gt;This is where the members of "Camp F" are coming from. They want to avoid the project references in order to speed up the IDE but they usually end up spending the time they saved on resolving the versioning issues.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Now Meet Both!&lt;/STRONG&gt;&lt;BR&gt;None of these solutions are perfect but as long as the development team is consistent in following one of these approaches, then the team can live with it. This becomes a major problem when you have members from both camps in the same development&amp;nbsp;team.&amp;nbsp;This has been the case in most of the development teams I have worked with and I bet most of you have had similar experiences. So what is a typical day on such project? Somebody from "Camp F" is not happy with performance of the IDE while he is working on the "Order Processing" feature of the application. As a result,&amp;nbsp;he decides to replace all of the references to the "UI Framework" projects with file references. But guess that? The dependency type is defined in the project file, so this change&amp;nbsp;results in&amp;nbsp;modification of the project file and the changes are checked back into the&amp;nbsp;source control at some point. Few hours later, somebody from "Camp P" who is working on one of those "UI Framework" projects is trying to perform an integration test to validate a change she made to the UI Framework and finds out that the dependencies are out of date. She checks the source control as it was working fine until that morning and notices the change. She then reverts all of those changes as file references will make her job harder. And the team will soon end up in changing the references types back and forth between project and file references and and this changes cause further problems in the build process. Add to this all of the discussions/arguments as to which approach is better and you will see how much time is wasted as developers and build engineers keep changing the dependencies to suit their needs.&lt;/P&gt;
&lt;P mce_keep="true"&gt;What is the solution then? I am going to start with re-iterating what you probably know already but bear with me - I'll try to keep it short!&lt;/P&gt;
&lt;P mce_keep="true"&gt;The &lt;A href="http://www.codeplex.com/TFSGuide" mce_href="http://www.codeplex.com/TFSGuide"&gt;Team Development with Visual Studio Team Foundation Server guide&lt;/A&gt;&amp;nbsp;does a pretty good job at providing &lt;A href="http://www.codeplex.com/TFSGuide/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control&amp;amp;referringTitle=Home" mce_href="http://www.codeplex.com/TFSGuide/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control&amp;amp;referringTitle=Home"&gt;high level guidelines&lt;/A&gt; for choosing the right approach. It provides three options&amp;nbsp;for managing the&amp;nbsp;solutions: Single Solution, Partitioned Solution and Multiple Solutions. I am going to skip over the Single Solution. If you can manage everything in the same solution, then you are not worried much about the solution design, right?&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;&lt;STRONG&gt;Partitioned Solution&lt;BR&gt;&lt;/STRONG&gt;If you work on a large system, consider using multiple solutions, each representing a sub-system in your application. These solutions can be used by developers in order to work on smaller parts of the system without having to load all code across all projects. Design your solution structure so any projects that have dependencies are grouped together. This enables you to use project references rather than file references. Also consider creating a master solution file that contains all of the projects. You can use this to build your entire application.&lt;/EM&gt;&lt;/P&gt;
&lt;P align=center mce_keep="true"&gt;&lt;IMG style="WIDTH: 627px; HEIGHT: 452px" border=0 alt="Partitioned Solution" src="http://mehranikoo.net/images/blog/SolutionReferences/Partitioned.jpg" width=779 height=768 mce_src="http://mehranikoo.net/images/blog/SolutionReferences/Partitioned.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;&lt;STRONG&gt;Multiple Solutions&lt;BR&gt;&lt;/STRONG&gt;If you work on a very large solution requiring many dozens of projects, you may encounter solution scalability limits. In this scenario, break your application into multiple solutions but do not create a master solution for the entire application because all references inside each solution are project references. References to projects outside of each solution (for example to third-party libraries or projects in another sub-solution) are file references. This means that there can be no “master” solution. &lt;BR&gt;&lt;BR&gt;Instead, you must use a script that understands the order in which the solutions need to be built. One of the maintenance tasks associated with a multiple-solution structure is ensuring that developers do not inadvertently create circular references between solutions. This structure requires complex build scripts and explicit mapping of dependency relationships. In this structure it is not possible to build the application in its entirety within Visual Studio. Instead, you can use TFS Team Build or MSBuild directly. &lt;/EM&gt;&lt;/P&gt;
&lt;P align=center mce_keep="true"&gt;&lt;IMG style="WIDTH: 596px; HEIGHT: 448px" border=0 src="http://mehranikoo.net/images/blog/SolutionReferences/Multiple.jpg" width=767 height=721 Solutions?&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The Partitioned Solution approach doesn't scale well for very large solutions since it will make the IDE very slow and this sends you down the Multiple Solutions approach. So you&amp;nbsp;group related projects and&amp;nbsp;create a solution for each group. You&amp;nbsp;use project references for dependencies inside the solution and file references&amp;nbsp;for those dependencies that cross the&amp;nbsp;solution boundaries. This is where the problems start:&lt;/P&gt;
&lt;P mce_keep="true"&gt;1- You cannot create a master solution that contains all of the projects. This is because you have created file references for cross-solution dependencies, which will cause problems when you try to build the master solution.&lt;/P&gt;
&lt;P mce_keep="true"&gt;2-&amp;nbsp;Depending on which area of the system you are working on, you may want to have a different slice of the system in&amp;nbsp;your solution. For example, if you are a member of a team working on a specific feature such as Order Processing, you want to have a vertical slice that goes across application layers (presentation, business and&amp;nbsp;data). But if you are working on the UI Framework for the application, you want to have a horizontal slice that includes the presentation layer from all functional areas as well as the UI Framework.&lt;/P&gt;
&lt;P align=center mce_keep="true"&gt;&lt;IMG style="WIDTH: 507px; HEIGHT: 316px" border=0 alt="Solution References" src="http://mehranikoo.net/images/blog/SolutionReferences/SolutionReferences.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;So&amp;nbsp;even if all of the team members agree on the concept of Multiple Solutions, there are decision&amp;nbsp;to be made on how the projects are going to be grouped into multiple solutions and as you can see in the above diagram, these categorisations don't necessarily play well with each other.&lt;/P&gt;
&lt;P mce_keep="true"&gt;You always need to consider various factors such as the solution size and simplicity of the build process and choose one of these approaches (none of which are perfect):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Single Solution&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Partitioned Solution&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Multiple Solutions&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Multiple Partitioned Solutions&amp;nbsp;&lt;BR&gt;&lt;/STRONG&gt;Some of you may know about this already but there is another approach too. One can argue that it is the same as Partitioned Solution but in order to avoid confusion(!), I&amp;nbsp;usually call it "Multiple Partitioned Solutions" or "MPS" (as you know we love TLAs). So what is it and how does it work?&lt;/P&gt;
&lt;P mce_keep="true"&gt;MSBuild is a great build engine. One of its features is the ability to follow&amp;nbsp;and find the project references in a project even if those referenced projects are not inside the solution you are trying to build. This means you no longer need to have all of the project references inside the solution. Believe it or not, but you can successfully build the solution and the projects inside it even if the referenced projects are not in the solution. This will work both from the IDE and the command line as they both rely on the underlying MSBuild functionality. The only condition here is that the referenced projects need to have been built already. MSBuild is able to follow and find those referenced projects but it won't build them for you. Is this a major problem? Probably not because when you get the latest version from the source control, you usually do a full build and then start&amp;nbsp;working on your specific area.&lt;/P&gt;
&lt;P align=center mce_keep="true"&gt;&lt;IMG style="WIDTH: 597px; HEIGHT: 436px" border=0 alt="Multiple Partitioned Solutions" src="http://mehranikoo.net/images/blog/SolutionReferences/MultiplePartitioned.jpg" mce_src="http://mehranikoo.net/images/blog/SolutionReferences/MultiplePartitioned.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Let's see how the system will be structured then. The dependencies between the projects are created as project references wherever possible. Depending on your requirements, you can create a solution that contains only a subset of projects you need to work on. Because the dependencies are project references, you can now have cross-cutting solutions that go across functional areas and architectural layers. You can also have a master solution because the dependencies are project references. Clearly, you don't want to open the master solution in the IDE often as it will take a&amp;nbsp;long time to load, it will be slow and you don't usually work on all projects at the same time. The master solution will primarily be used for build purposes. &lt;/P&gt;&lt;EM&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Note 1: I haven't tried this but as far as I know, you won't be able to build a solution on the build server if a project reference&amp;nbsp;is missing. So on your build server, make sure you always build the master solution and not the partitioned solutions. You always want to build everything on the build server anyway.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Note 2: I am not saying that you should never use file references. There are cases where you don't want the dependencies to be built in the same build step so you can use file references if needed. The advantage of the Multiple Partitioned Solutions is that it gives you maximum flexibility.&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Why do&amp;nbsp;I call it "Multiple Partitioned Solutions"? Because the master solution is partitioned multiple times based on&amp;nbsp;various perspectives. For example, the master solution can be partitioned into three solutions, one for each logical layer (such as presentation, business and data). At the same time, it can also be partitioned into another three solutions, one for each functional area (such as Order Processing, User Management and Call Centre). &lt;/P&gt;
&lt;P mce_keep="true"&gt;Like the other approaches, The MPS approach is not perfect and it has its own challenges.&amp;nbsp;I personally prefer this approach&amp;nbsp;though. It addresses the concerns around solution size and versioning and is very flexible as you can have cross-cutting solutions. But from a tooling perspective, we can provide you with better support so this is an area for improvement. As an&amp;nbsp;example, if you try to remove a project from a solution in Visual Studio, it removes all of the dependencies on that project too. If you are following the MPS approach, this is not necessarily what we want. This is not as bad as it looks as in most projects I have seen, the solutions are created and maintained by dev leads, architects and/or build engineers so as long as they know what they are doing, it will be fine but it would be nice to have a proper solution here.&lt;/P&gt;
&lt;P mce_keep="true"&gt;I have found a workaround for this, which is to unload the projects that depend on the project we are trying to remove before removing the project. This will prevent the dependencies from being dropped automatically. Another approach is to manually edit the solution file and remove the project(s).&lt;/P&gt;
&lt;P mce_keep="true"&gt;As I said, these are workarounds not solutions. When we remove a project, we ideally&amp;nbsp;want to&amp;nbsp;be able to specify whether we want the project to be removed from the dependencies or we are just trying to exclude that project from the solution. So maybe we could add an "Exclude" option to the project context menu in the Solution Explorer?&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;So... have you used the MPS approach in your development projects? If yes, can you share your experiences? What are the challenges you have faced and how have you addressed them? What kind of support do you expect from the IDE in this area?&lt;/P&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=56977" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Development Process" scheme="http://mehranikoo.net/CS/archive/tags/Development+Process/default.aspx" /><category term=".NET Framework" scheme="http://mehranikoo.net/CS/archive/tags/.NET+Framework/default.aspx" /><category term="Architecture" scheme="http://mehranikoo.net/CS/archive/tags/Architecture/default.aspx" /><category term="MSArchitectPortal" scheme="http://mehranikoo.net/CS/archive/tags/MSArchitectPortal/default.aspx" /><category term="Visual Studio" scheme="http://mehranikoo.net/CS/archive/tags/Visual+Studio/default.aspx" /></entry><entry><title>Windows 7 Beta is Here</title><link rel="alternate" type="text/html" href="http://mehranikoo.net/CS/archive/2009/01/08/Windows7BetaIsHere.aspx" /><id>http://mehranikoo.net/CS/archive/2009/01/08/Windows7BetaIsHere.aspx</id><published>2009-01-08T08:31:00Z</published><updated>2009-01-08T08:31:00Z</updated><content type="html">&lt;P mce_keep="true"&gt;Windows 7 Beta is now available for download from the &lt;A class="" href="https://msdn.microsoft.com/en-us/subscriptions/manage/default.aspx" mce_href="https://msdn.microsoft.com/en-us/subscriptions/manage/default.aspx"&gt;MSDN Subscriber area&lt;/A&gt;.&amp;nbsp;It will then become widely available for download on Friday (9 Jan) via &lt;A href="http://microsoft.com/windows7" mce_href="http://microsoft.com/windows7"&gt;http://microsoft.com/windows7&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://mehranikoo.net/images/Blog/Win7Beta.jpg" mce_src="http://mehranikoo.net/images/Blog/Win7Beta.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;I am very tempted to go ahead and install it as the base OS on my work laptop&amp;nbsp;today but as usual, Microsoft IT have created the customised image to be used internally so I will wait until next week when I have physical access to the corporate network. My home desktop is very excited as its OS is getting an upgrade this evening :)&lt;/P&gt;&lt;img src="http://mehranikoo.net/CS/aggbug.aspx?PostID=55955" width="1" height="1"&gt;</content><author><name>Mehran</name><uri>http://mehranikoo.net/CS/members/Mehran.aspx</uri></author><category term="Windows 7" scheme="http://mehranikoo.net/CS/archive/tags/Windows+7/default.aspx" /></entry></feed>