We use git for source control, and have adopted a standardised reposistory layout for our projects.
The following example is for a Visual Studio solution on Windows, but can be adapted for other platforms.
Repo\ -- this is the root of the repository Repo.build -- NAnt build script (or equivalent) Repo.sln -- Visual Studio solution file (at root) src\ -- contains primary source code Logos.Project\ -- one subfolder per project Logos.Project.csproj *.cs Properties\ AssemblyInfo.cs other projects\ -- as above tests\ -- contains tests for each 'src' project Logos.Project.Tests\ -- one subfolder per test project Logos.Project.Tests.csproj *.cs other test projects\ -- as above ext\ -- contains submodules Submodule\ -- third-party source lib\ -- precompiled third-party code *.dll packages\ -- NuGet packages Package.1.0\ -- various packages repositories.config -- configuration build\ -- .gitignore'd, contains build output tools\ -- build tools NUnit\ -- test framework other tools\ -- other tools as necessary
At the root of the repository, we have the Visual Studio solution file (used by developers) and the build script (used by the build server). This might be a NAnt build file, a psake build script, a shell script, or something similar.
tests folders contain the bulk of the code we write; this is
the code that gets shipped to users or deployed to a web server, and tests
that get run by the build server.
packages contain third-party code (or sometimes Logos code
that is consumed as a precompiled binary, rather than as source). Folders
ext are git submodules that reference third-party repos.
contains pre-compiled DLLs and static libraries.
packages is reserved for
use by NuGet. (This folder is added to
if this repo uses NuGet Package Restore.)
build is never committed, but is reserved to contain build output.
contains code that is required to build the project, but doesn’t get shipped.
This would include things like NUnit (or another test
framework), StyleCop plugins, NAnt
extensions, mocking frameworks, etc.
Posted by Bradley Grainger on November 15, 2012