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.
The src
and 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.
ext
, lib
, and packages
contain third-party code (or sometimes Logos code
that is consumed as a precompiled binary, rather than as source). Folders
under ext
are git submodules that reference third-party repos. lib
contains pre-compiled DLLs and static libraries. packages
is reserved for
use by NuGet. (This folder is added to .gitignore
if this repo uses NuGet Package Restore.)
build
is never committed, but is reserved to contain build output. tools
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