Bir arkadaşım ile birlikte bir command script yazdık. Onu da Visual Studio içinden pre-build event command line kısmından
c:\Pre-Build.bat $(SolutionDir)
yazarak çağırdık. Aşağıda da bu bat dosyasının kodları var. Böylece her build yaptığımda bu script benim programımdaki “Assemblyinfo.cs” dosyalarını arıyor. O dosyadaki içinde version geçmeyen her satırı bir temp dosyaya yazıyor. Sonra güncel versiyonu yazıyor. Eski dosyayı siliyor ve temp dosyanın adını “Assemblyinfo.cs” olarak değiştiriyor. Sonrada scriptin başına bir kontrol ekledim. Eğer dosyanın içinde güncel versiyon yazıyorsa o dosyayı geç diye. Yoksa git dosya içinde bir değişikilk olmasa bile farklı bir dosya olduğunu anlayıp değişiklik var diye ısrar ediyor.
@echo off setlocal enabledelayedexpansion if [%1] == [] GOTO :USAGE chdir /d "%1" for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set Month=0%Month% set Day=0%Day% set Year=%Year:~-3% set Month=%Month:~-2% set Day=%Day:~-2% set today=%Year%%Month%%Day% set v1=%today:~0,1% set v2=%today:~1,2% set v3=%today:~3,3% set version=%v1%.%v2%.%v3% for /F "delims=" %%f in ('dir /s /b Assemblyinfo.cs') do ( echo ^> %%f pushd %%~dpf >nul find "%version%" AssemblyInfo.cs && ( echo "%version%" was found. ) || ( for /F "usebackq delims=" %%g in ("AssemblyInfo.cs") do ( set ln=%%g set skip=0 if "!ln:AssemblyVersion=!" NEQ "!ln!" set skip=1 if "!ln:AssemblyFileVersion=!" NEQ "!ln!" set skip=1 if "!ln:AssemblyInformationalVersion=!" NEQ "!ln!" set skip=1 if !skip!==0 echo !ln! >> AssemblyInfo.cs.temp ) echo [assembly: AssemblyVersion^("%version%"^)] >> AssemblyInfo.cs.temp echo [assembly: AssemblyFileVersion^("%version%"^)] >> AssemblyInfo.cs.temp echo [assembly: AssemblyInformationalVersion^("%version%"^)] >> AssemblyInfo.cs.temp move /y AssemblyInfo.cs.tempAssemblyInfo.cs popd ) ) echo Done^^! GOTO:EOF :USAGE echo Usage: echo SetVersion.bat ProjectFolderAddress echo.