<# .SYNOPSIS Velopack ile Setup.exe üretimi. Self-contained publish alıp vpk pack yapar. .DESCRIPTION 1. Proje dosyasından sürüm okur 2. dotnet publish (self-contained, single-file, win-x64) 3. vpk pack ile Setup.exe ve Portable.zip üretir 4. Çıktı: artifacts/velopack/win-x64-stable/ .NOTES Velopack CLI: dotnet tool restore ile yüklenen vpk kullanılır Icon: Assets/AppIcon.ico (installer ikonu) Velopack CLI args: camelCase (--outputDir, --packId, --packTitle, --packAuthors, --packVersion, --packDir, --mainExe) #> param( [switch]$WhatIf ) $ErrorActionPreference = "Stop" $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Definition $repoRoot = Split-Path -Parent (Split-Path -Parent $scriptDir) $projPath = Join-Path $repoRoot "src\RgbLedStripController\RgbLedStripController.csproj" $iconPath = Join-Path $repoRoot "src\RgbLedStripController\Assets\AppIcon.ico" $publishDir = Join-Path $repoRoot "artifacts\publish\win-x64" $velopackDir = Join-Path $repoRoot "artifacts\velopack\win-x64-stable" # Sürümü csproj'dan oku (birden fazla PropertyGroup olabilir) $projXml = [xml](Get-Content $projPath) $version = $projXml.Project.PropertyGroup | Where-Object { $_.Version } | Select-Object -First 1 -ExpandProperty Version if (-not $version) { throw "Version not found in csproj" } Write-Host "Version: $version" -ForegroundColor Cyan # Publish output klasörü $stagedPublishDir = Join-Path $publishDir $version if (-not $WhatIf) { if (Test-Path $stagedPublishDir) { Remove-Item -Recurse -Force $stagedPublishDir } } else { Write-Host "[WhatIf] Would clean: $stagedPublishDir" } # 1. dotnet publish $publishArgs = @( "publish", $projPath "-c", "Release" "-r", "win-x64" "--self-contained", "true" "-p:PublishSingleFile=true" "-p:PublishTrimmed=false" "-p:IncludeNativeLibrariesForSelfExtract=true" "-p:DebugType=none" "-p:DebugSymbols=false" "--configfile", (Join-Path $repoRoot "NuGet.Config") "-o", $stagedPublishDir ) Write-Host "dotnet publish..." -ForegroundColor Cyan if (-not $WhatIf) { & dotnet $publishArgs } else { Write-Host "[WhatIf] dotnet $publishArgs" } # 2. vpk pack (args camelCase) $vpkArgs = @( "pack", "--outputDir", $velopackDir, "--packId", "Fristy.RgbLedStripController", "--packTitle", "RGB Led Strip Controller", "--packAuthors", "fristy", "--packVersion", $version, "--icon", $iconPath, "--packDir", $stagedPublishDir, "--mainExe", "RgbLedStripController.exe" ) Write-Host "vpk pack..." -ForegroundColor Cyan if (-not $WhatIf) { & dotnet tool run vpk $vpkArgs } else { Write-Host "[WhatIf] dotnet tool run vpk $vpkArgs" } Write-Host "Done. Output: $velopackDir" -ForegroundColor Green if (-not $WhatIf) { if (Test-Path $velopackDir) { Get-ChildItem $velopackDir | ForEach-Object { Write-Host " $($_.Name) - $([math]::Round($_.Length/1MB,2)) MB" } } else { Write-Host "Warning: $velopackDir not found" -ForegroundColor Yellow } }