title: .NET automated build with cruisecontrol.net + nant - multiple assembly structure / best practice
body: <p>I'm doing some work with several shared .NET assemblies and a generic web application that I would like to handle better in our CC.NET/NAnt build environment.</p>
  
  <p>Currently, we have several .NET assemblies (shared common code that we use in client projects) that exist in different .NET solutions within different repositories in our SCM (Vault incidentally). They are all configured under CC.NET separately so we have a decent amount of control over their build and deployment at present.</p>
  
  <p>We have developed a CMS system that uses some of the .NET assemblies and includes a common administration website project and a template website example project. Out of this one solution we have the following elements that need to managed separately:</p>
  
  <ul>
  <li>Admin interface is not tied to .NET so it is template based and we are developing a PHP backend for it currently.</li>
  <li>CMS shared assembly build on top of our other common company wide assemblies.</li>
  <li>Control over functionality within each major CMS build/release.</li>
  </ul>
  
  <p>I'd like the build output of this solution to be a Visual Studio template, which we can use to develop other client sites and better manage version changes within the CMS itself, as we add features to the codebase.</p>
  
  <p>I have a rough approach for all this and think it is achievable, however, I wanted to open this topic up for discussion and see what everyone else is doing when it comes to managing the build and deployment of multiple solutions.</p>
  
  <p>Main considerations for us are:</p>
  
  <ul>
  <li>Do we make use of the integration queue functionality in CC.NET to ensure a build order and pull together the assemblies we need for the CMS at build time?</li>
  <li>Debugging within a CMS client site i.e. stepping into the shared assemblies' code when the client solution is a version of the base CMS system and therefore separate.</li>
  <li>Developing and extending the CMS when it uses shared assemblies i.e. do we add the assembly projects to the trunk solution during development (across source control repositories) and then rely on the build to pull it together or do we use a different approach entirely?</li>
  <li>Any other issues people might have experienced that could change our way of thinking?</li>
  </ul>
  
  <p>Hopefully this question isn't too vague and some of you will have dealt with these issues. Look forward to hearing everyones experiences.</p>
  
  <p>Many thanks!
  Tim</p>