Do you know the desired features of structuring large Builds in VS.NET?

Last updated by Brady Stroud [SSW] 8 months ago.See history

The desired features of structuring large Builds in VS.NET:

  1. Scalable - The project should allow continuous additions to the structure

    • Developers should be able to keep adding to the structure
  2. Multiple Versions - The project should support multiple product releases

    • The structure should be able to allow developers to work on the next release while there is still work in progress for a previous release of another section of the project
    • Developers can work side by side with different versions in parallel (i.e. at the same time)
  3. Efficient - The build should be as quick as possible
  4. Reliability - Builds should be reproducible on any machine and reliable
  5. Switchable - The project should be able to switch between debug release and other versions

    • The project should be able to activate without debug
    • A config should be made for a demo build
    • It should support a full release

Method 1 - Using Project Reference Assemblies within VS.NET

The first attempt was the following method of adding project references to a large solution.

Figure: Adding a project reference

Each project within a solution references other product's assemblies by the project's GUID.

✅ Advantages

The advantages of adding the project to the solution is that you can easily switch between debug and release versions, and the build time is quicker.

❌ Disadvantages

The main disadvantage is that the project can only reference other projects within the same solution.

Method 2 - Using File Reference Assemblies within VS.NET

The following method of adding file references to a large solution was also attempted.

Figure: Adding a file reference

This method involves projects referencing assemblies by looking into their reference path.

✅ Advantages

The main advantage of referencing .dll's is that it is more flexible. Projects can reference assemblies from other solutions outside the current solution.

  • The solution's environment is "cleaner", allowing projects to be more expansive
  • All you need to do is change the assembly to "shared"

❌ Disadvantages

There are, however, many disadvantages including the fact that only one version of the proj file can be added to the solution.

  • The .csproj file cannot be used
  • You cannot reference or one set of assemblies for debug and another for release. Only point to one
  • VS.NET only use the paths specified in the .proj file as a hint. VS.NET records the location of the assemblies as options for the project for each user
  • You cannot switch between versions
  • You also cannot use this method if there are 200 projects in one solution

Adam Cogan
We open source.Loving SSW Rules? Star us on GitHub. Star
Stand by... we're migrating this site to TinaCMS