27 October, 2022

.NET Core with multiple Project Solution

For not trivial WebApps, multiple projects are needed. Here is an example of how to create all projects with the dotnet CLI and add them to a single solution.

Create the projects:

mkdir Teach
cd Teach

dotnet new angular -o Teach.Web
dotnet new nunit -o Teach.Web.Tests
dotnet new classlib -f net6.0 -o Teach.Business
dotnet new nunit -f net6.0 -o Teach.Business.Tests
dotnet new classlib -f net6.0 -o Teach.DataAccess
dotnet new nunit -o Teach.DataAccess.Tests
dotnet new classlib -f net6.0 -o Teach.Domain

Add references and a package to Teach.Web Domain and DataAccess are needed for dependency injection:

cd Teach.Web
dotnet add reference ../Teach.Business/Teach.Business.csproj
dotnet add reference ../Teach.Domain/Teach.Domain.csproj
dotnet add reference ../Teach.DataAccess/Teach.DataAccess.csproj
dotnet add package Microsoft.Extensions.Identity.Core

Add references and a package to Teach.Business:

cd ../Teach.Business
dotnet add reference ../Teach.Domain/Teach.Domain.csproj
dotnet add reference ../Teach.DataAccess/Teach.DataAccess.csproj
dotnet add package Microsoft.Extensions.Identity.Core
cd ../Teach.DataAccess
dotnet add reference ../Teach.Domain/Teach.Domain.csproj
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

An alternative to SqlServer is

dotnet add package Pomelo.EntityFrameworkCore.MySql
dotnet add package Microsoft.EntityFrameworkCore.Relational
cd ../Teach.Web.Tests
dotnet add reference ../Teach.Web/Teach.Web.csproj
dotnet add package Moq

cd ../Teach.Business.Tests
dotnet add reference ../Teach.Business/Teach.Business.csproj
dotnet add package Moq

cd ../Teach.DataAccess.Tests
dotnet add reference ../Teach.DataAccess/Teach.DataAccess.csproj
dotnet add package Moq

Now create the solution and add projects:

cd ..
dotnet new sln -n Teach

dotnet sln add Teach.Web/Teach.Web.csproj
dotnet sln add Teach.Business/Teach.Business.csproj
dotnet sln add Teach.DataAccess/Teach.DataAccess.csproj
dotnet sln add Teach.Domain/Teach.Domain.csproj
dotnet sln add Teach.Web.Tests/Teach.Web.Tests.csproj
dotnet sln add Teach.Business.Tests/Teach.Business.Tests.csproj
dotnet sln add Teach.DataAccess.Tests/Teach.DataAccess.Tests.csproj

Add gitignore file and build the solution:

dotnet new gitignore
dotnet build

Start the project:

dotnet run --project .\Teach.Web\Teach.Web.csproj