Windows Ortamında .NET Projelerinde Batch Scriptler ile Otomasyon
Herkese selam, bu makalede Windows ortamında .NET projelerinde Batch Script kullanarak nasıl standart bir proje kurulum süreci oluşturabileceğimizden bahsedeceğim.
Herkesin malumu bir .Net projesi oluştururken genellikle çok fazla tekrar eden adımlar ile karşılaşırız.
Örnek vermek gerekirse; solution oluşturma, projelerin eklenmesi, nuGet paketlerinin yüklenmesi, folder structure’ın oluşturulması, proje referanslarının eklenmesi gibi işlemler her defasında manuel olarak tekrar tekrar yapmak hem zaman kaybını hem de hata riskini beraberinde getiriyor.
Batch Script ile bu süreci otomatikleştirebilir ve standardize edebiliriz.
Aynı zamanda script dosyaları bir dokümantasyon görevi de görür.
Kurulum
Proje Yapısı
İlk olarak projemiz için örnek bir klasör yapısını belirleyelim:
ProjectName/
├── src/
│ ├── ProjectName.Domain/
│ ├── ProjectName.Application/
│ ├── ProjectName.Infrastructure/
│ └── ProjectName.API/
└── tests/
├── ProjectName.UnitTests/
└── ProjectName.IntegrationTests/
Script Dosyalarımız
Projemizi kurmak için temel script dosyalarını oluşturalım.
setup.bat — Kurulum Scripti
@echo off
setlocal enabledelayedexpansion
REM Assign project name to a variable
set PROJECT_NAME=ProjectName
echo 🚀 Creating %PROJECT_NAME% project...
REM Create the main directory
mkdir %PROJECT_NAME%
cd %PROJECT_NAME%
REM Create the solution
dotnet new sln
REM Create main folders
mkdir src
mkdir tests
REM Domain Layer
echo 📦 Creating Domain Layer...
dotnet new classlib -o src\%PROJECT_NAME%.Domain
dotnet add src\%PROJECT_NAME%.Domain\%PROJECT_NAME%.Domain.csproj package MongoDB.Bson
REM Application Layer
echo 📦 Creating Application Layer...
dotnet new classlib -o src\%PROJECT_NAME%.Application
dotnet add src\%PROJECT_NAME%.Application\%PROJECT_NAME%.Application.csproj package AutoMapper
dotnet add src\%PROJECT_NAME%.Application\%PROJECT_NAME%.Application.csproj reference src\%PROJECT_NAME%.Domain\%PROJECT_NAME%.Domain.csproj
REM Infrastructure Layer
echo 📦 Creating Infrastructure Layer...
dotnet new classlib -o src\%PROJECT_NAME%.Infrastructure
dotnet add src\%PROJECT_NAME%.Infrastructure\%PROJECT_NAME%.Infrastructure.csproj package MongoDB.Driver
dotnet add src\%PROJECT_NAME%.Infrastructure\%PROJECT_NAME%.Infrastructure.csproj reference src\%PROJECT_NAME%.Domain\%PROJECT_NAME%.Domain.csproj
dotnet add src\%PROJECT_NAME%.Infrastructure\%PROJECT_NAME%.Infrastructure.csproj reference src\%PROJECT_NAME%.Application\%PROJECT_NAME%.Application.csproj
REM API Layer
echo 📦 Creating API Layer...
dotnet new webapi -o src\%PROJECT_NAME%.API
dotnet add src\%PROJECT_NAME%.API\%PROJECT_NAME%.API.csproj reference src\%PROJECT_NAME%.Domain\%PROJECT_NAME%.Domain.csproj
dotnet add src\%PROJECT_NAME%.API\%PROJECT_NAME%.API.csproj reference src\%PROJECT_NAME%.Application\%PROJECT_NAME%.Application.csproj
dotnet add src\%PROJECT_NAME%.API\%PROJECT_NAME%.API.csproj reference src\%PROJECT_NAME%.Infrastructure\%PROJECT_NAME%.Infrastructure.csproj
REM Test projects
echo 📦 Creating test projects...
dotnet new xunit -o tests\%PROJECT_NAME%.UnitTests
dotnet new xunit -o tests\%PROJECT_NAME%.IntegrationTests
REM Add projects to solution
echo 🔗 Adding projects to the solution...
for /r src %%f in (*.csproj) do (
echo Adding: %%f
dotnet sln add %%f
)
for /r tests %%f in (*.csproj) do (
echo Adding: %%f
dotnet sln add %%f
)
REM Create folder structure
call create-folders.bat
echo ✅ %PROJECT_NAME% project successfully created!
pause
create-folders.bat — Klasör Yapısı
mkdir src\%PROJECT_NAME%.Domain\Common
REM Folders for the Application layer
mkdir src\%PROJECT_NAME%.Application\Common\Behaviors
mkdir src\%PROJECT_NAME%.Application\Common\Interfaces
mkdir src\%PROJECT_NAME%.Application\DTOs
mkdir src\%PROJECT_NAME%.Application\Features
mkdir src\%PROJECT_NAME%.Application\Mappings
REM Folders for the Infrastructure layer
mkdir src\%PROJECT_NAME%.Infrastructure\Authentication
mkdir src\%PROJECT_NAME%.Infrastructure\Persistence
mkdir src\%PROJECT_NAME%.Infrastructure\Services
REM Folders for the API layer
mkdir src\%PROJECT_NAME%.API\GraphQL\Mutations
mkdir src\%PROJECT_NAME%.API\GraphQL\Queries
mkdir src\%PROJECT_NAME%.API\GraphQL\Types
mkdir src\%PROJECT_NAME%.API\Configuration
echo ✅ Folder structure successfully created!
Nasıl Kullanırız?
- Her iki .bat dosyasını projenizin root dizinine kaydedin.
- setup.bat dosyasına çift tıklayın veya Command Prompt’ta aşağıdaki komutu çalıştırın.
setup.bat
Ekstra
Hata Kontrolü : İhtiyaç halinde istenilen komutlardan sonra hata kontrolü yapılabilir. Örnek isterseniz buyrun:
IF %ERRORLEVEL% NEQ 0 (
echo ❌ An error occurred!
pause
exit /b %ERRORLEVEL%
)
Çıktı
Haydi scriptleri çalıştıralım ve çıktıları gözlemleyelim.
Her şey yolunda gözüküyor. Projemizi incelediğimiz zaman; projelerin oluştuğunu, referansların eklendiğini, nuGet paketlerinin yüklendiğini ve diğer şeylerin başarılı bir şekilde oluştuğunu gözlemleyebiliyoruz.
Konu ilginizi çektiyse Shell Scripting’e de bir göz atın derim :) Esen kalın.
Daha fazla detay için;