Visual Studio için build events yazdım – 2

Aslında bunu da aynı zamanda yazdım ama farklı konu ve mantığa sahip olduğu için farklı bir yazıda ekliyorum. Bu sefer ki yazdığım script bir powershell scripti ve post-build event olarak çalışıyor.

Bu scriptin amacı masaüstü programlarını “Release” olarak build ettiğimizde build edilen yerdeki exe ve dll dosyalarını alıp bir zip dosyasına atıyor. Dosya adı proje adı, tarih, saat ve kullanıcı adından oluşuyor. Aşağıdaki resim gibi sonuç çıkıyor karşımıza. Bence gereksiz bir şeydi bu mesele çünkü Git diye bir şey var ama herkes aynı mantıkla çalışmıyor. Bir versiyondaki özellik bir sonrakinde kayboluyormuş, bir önceki versiyonda çalışan özellik yenisinde çalışmıyormuş… Allah’tan bana gelmiyor böyle saçma sapan hatalar.

 

Şu anda bir işe yaradığı yok ama güzel bir özellik. İş yaptığımızı gösterebiliyoruz herkese.

Çalıştırmak için Visual Studio’nun Post-Build Event Command Line kısmına

powershell -ExecutionPolicy ByPass -file "c:\Post-Execute.ps1" -ConfigurationName "$(ConfigurationName)" -TargetName "$(TargetName)"

yazın. Sonra da aşağıdaki kodları “Post-Execute.ps1” adında bir dosyaya kaydedin. Hepsi bu kadar.

param (
    [Parameter(Mandatory=$true)][string] $ConfigurationName,
    [Parameter(Mandatory=$true)][string] $TargetName
 )
 
$User="Huseyin"
 
function zipFiles([string] $sourceFileName)
{   
	Add-Type -Assembly System.IO
	Add-Type -Assembly System.IO.Compression.FileSystem

	$sourceFolder="\\192.168.2.232\Ortak\_Output\" + $sourceFileName + "\"
	$DateStr = (Get-Date).ToString("yy.MM.dd HH.mm.ss")
	$FileName = $TargetName + " " + $DateStr + " " + $User + ".zip"
	$zipFileName = $sourceFolder+$FileName

	$releaseFolder=$sourceFolder+"Temp"
	$sourceFileNames1=$sourceFileName+".exe*"
	$sourceFileNames2=$sourceFileName+".dll*"
	$directoryTest = (Test-Path $releaseFolder)
	if ( $directoryTest -eq $false) 
	{ 
		New-Item -ItemType Directory -Force -Path $releaseFolder
	}
	Get-ChildItem $sourceFolder -Filter $sourceFileNames1 | Copy-Item -Destination $releaseFolder -Force
	Get-ChildItem $sourceFolder -Filter $sourceFileNames2 | Copy-Item -Destination $releaseFolder -Force
	
	try
	{
		[System.IO.Compression.ZipFile]::CreateFromDirectory($releaseFolder,$zipFileName)
	}
	catch [System.IO.IOException] 
	{
		Write-Output ($dateTime + ' | ' + $_.Exception.Message )
	}
	Get-ChildItem -Path Temp -Recurse | Remove-Item -force -recurse -ErrorAction SilentlyContinue
	Remove-Item .\Temp -Recurse -Force -ErrorAction SilentlyContinue
} 

if ($ConfigurationName -eq "Release") {
	zipFiles -sourceFileName $TargetName
}