60 lines
2.0 KiB
Batchfile
60 lines
2.0 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
if [%1] == [] GOTO :USAGE
|
|
set version=%1
|
|
set fileversion=%1
|
|
set informationalversion=%1
|
|
|
|
if [%2] NEQ [] SET fileversion=%2
|
|
if [%3] NEQ [] SET informationalversion=%3
|
|
|
|
echo Setting version in *.csproj files
|
|
set "script=%TEMP%\setversion-csproj.ps1"
|
|
(
|
|
echo param^(
|
|
echo [string]$Version,
|
|
echo [string]$FileVersion,
|
|
echo [string]$InformationalVersion
|
|
echo ^)
|
|
echo $ErrorActionPreference = "Stop"
|
|
echo $projects = Get-ChildItem -Path ^(Get-Location^) -Filter *.csproj -Recurse
|
|
echo foreach ^($project in $projects^) ^{
|
|
echo Write-Host "^> $($project.FullName)"
|
|
echo [xml]$xml = Get-Content -Path $project.FullName
|
|
echo $propertyGroup = $xml.Project.PropertyGroup ^| Select-Object -First 1
|
|
echo if ^(-not $propertyGroup^) ^{
|
|
echo $propertyGroup = $xml.CreateElement^("PropertyGroup"^)
|
|
echo [void]$xml.Project.AppendChild^($propertyGroup^)
|
|
echo ^}
|
|
echo function Set-Or-CreateTag ^([xml]$doc, [System.Xml.XmlElement]$group, [string]$tagName, [string]$value^) ^{
|
|
echo $node = $group.SelectSingleNode^($tagName^)
|
|
echo if ^($node^) ^{
|
|
echo $node.InnerText = $value
|
|
echo ^} else ^{
|
|
echo $newNode = $doc.CreateElement^($tagName^)
|
|
echo $newNode.InnerText = $value
|
|
echo [void]$group.AppendChild^($newNode^)
|
|
echo ^}
|
|
echo ^}
|
|
echo Set-Or-CreateTag $xml $propertyGroup "Version" $Version
|
|
echo Set-Or-CreateTag $xml $propertyGroup "AssemblyVersion" $Version
|
|
echo Set-Or-CreateTag $xml $propertyGroup "FileVersion" $FileVersion
|
|
echo Set-Or-CreateTag $xml $propertyGroup "InformationalVersion" $InformationalVersion
|
|
echo $xml.Save^($project.FullName^)
|
|
echo ^}
|
|
) > "%script%"
|
|
|
|
powershell -NoProfile -ExecutionPolicy Bypass -File "%script%" "%version%" "%fileversion%" "%informationalversion%"
|
|
set exit_code=%ERRORLEVEL%
|
|
del /q "%script%" >nul 2>&1
|
|
if not %exit_code%==0 exit /b %exit_code%
|
|
echo Done!
|
|
|
|
GOTO:EOF
|
|
|
|
:USAGE
|
|
echo Usage:
|
|
echo.
|
|
echo SetVersion.cmd Version [FileVersion] [InformationalVersion]
|
|
echo. |