Building on my post about how to do some common Solution and Project tasks using the dotnet command, here's a sample script to create a complete solution that can be used from Visual Studio 2017 or Visual Studio Code.
I wanted to be able to create a complete solution and project structure all from the command line. Yes yes yes, I know that I could do something like "yo aspnet" and that that would pretty much do the same thing. Well, it only pretty much does the same thing and I wanted to be able to do everything start to finish and only using the dotnet command. I wanted to create the solution file (*.sln), create the folder structure, create a project for the ASP.NET Core code, create a class library project that would hold the back-end code that would be used by the ASP.NET Core project, create an MSTest-based unit test project, and then create all the references between projects so that this would compile right away. I wanted to be able to call my script, pass in an argument for the Solution Name and then have it create everything.
Assuming a script file called Create.bat and a solution name of MySolution, here's the example call:
Create.bat MySolution
Here's the directory structure that I wanted:
/MySolution
MySolution.sln
/src
/MySolution.Api
MySolution.Api.csproj
/MySolution.WebUi
MySolution.WebUi.csproj
/test
/MySolution.Tests
MySolution.Tests.csproj
Here's the batch script for doing this on Windows:
set "base=%cd%"
set "workspaceroot=%base%\%1"
echo %base%
echo %workspaceroot%
mkdir %workspaceroot%
mkdir %workspaceroot%\src
mkdir %workspaceroot%\src\%1.Api
mkdir %workspaceroot%\src\%1.WebUi
mkdir %workspaceroot%\test
mkdir %workspaceroot%\test\%1.Tests
cd %workspaceroot%\src\%1.Api
dotnet new classlib -f netcoreapp1.1
cd %workspaceroot%\src\%1.WebUi
dotnet new mvc -f netcoreapp1.1
cd %workspaceroot%\test\%1.Tests
dotnet new mstest -f netcoreapp1.1
cd %workspaceroot%
dotnet new sln
dotnet sln .\%1.sln add .\src\%1.Api\%1.Api.csproj
dotnet sln .\%1.sln add .\src\%1.WebUi\%1.WebUi.csproj
dotnet sln .\%1.sln add .\test\%1.Tests\%1.Tests.csproj
cd %workspaceroot%\src\%1.WebUi
dotnet add reference ..\%1.Api\%1.Api.csproj
cd %workspaceroot%\test\%1.Tests
dotnet add reference ..\..\src\%1.Api\%1.Api.csproj
dotnet add reference ..\..\src\%1.WebUi\%1.WebUi.csproj
cd %workspaceroot%
dotnet restore
dotnet build
Here's the shell script for doing this on Mac OS / Linux:
#!/bin/bash
base="$PWD"
workspaceroot="$base/$1"
echo $workspaceroot
mkdir $workspaceroot
mkdir $workspaceroot/src
mkdir $workspaceroot/src/$1.Api
mkdir $workspaceroot/src/$1.WebUi
mkdir $workspaceroot/test
mkdir $workspaceroot/test/$1.Tests
cd $workspaceroot/src/$1.Api
dotnet new classlib -f netcoreapp1.1
cd $workspaceroot/src/$1.WebUi
dotnet new mvc -f netcoreapp1.1
cd $workspaceroot/test/$1.Tests
dotnet new mstest -f netcoreapp1.1
cd $workspaceroot
dotnet new sln
dotnet sln ./$1.sln add ./src/$1.Api/$1.Api.csproj
dotnet sln ./$1.sln add ./src/$1.WebUi/$1.WebUi.csproj
dotnet sln ./$1.sln add ./test/$1.Tests/$1.Tests.csproj
cd $workspaceroot/src/$1.WebUi
dotnet add reference ../$1.Api/$1.Api.csproj
cd $workspaceroot/test/$1.Tests
dotnet add reference ../../src/$1.Api/$1.Api.csproj
dotnet add reference ../../src/$1.WebUi/$1.WebUi.csproj
cd $workspaceroot
dotnet restore
dotnet build
Download the scripts
Here's the script for Windows. Here's the script for Mac OS & Linux.
-Ben