11<Project Sdk =" Microsoft.NET.Sdk" >
22
33 <PropertyGroup >
4- <Version >4.0.1.3868</ Version >
4+ <BaseVersion >4.0.1</ BaseVersion >
55 <OutputType >WinExe</OutputType >
66 <TargetFramework >net8.0-windows</TargetFramework >
77 <Nullable >enable</Nullable >
205205 <Delete Files =" @(_DepDlls)" />
206206 </Target >
207207
208+
209+ <!-- ── Auto-incrementing build counter ─────────────────────────────────── -->
210+ <!-- Reads build.counter, increments by 1 each build, writes it back, -->
211+ <!-- then stamps Version / AssemblyVersion / FileVersion. -->
212+ <!-- Skipped during VS design-time background builds. -->
213+ <Target Name =" IncrementBuildCounter"
214+ BeforeTargets =" BeforeBuild"
215+ Condition =" '$(DesignTimeBuild)' != 'true'" >
216+
217+ <PropertyGroup >
218+ <_CounterFile >$(MSBuildProjectDirectory)\build.counter</_CounterFile >
219+ </PropertyGroup >
220+
221+ <!-- Read current number (defaults to 0 if file is missing) -->
222+ <ReadLinesFromFile File =" $(_CounterFile)" Condition =" Exists('$(_CounterFile)')" >
223+ <Output TaskParameter =" Lines" ItemName =" _CounterLines" />
224+ </ReadLinesFromFile >
225+ <PropertyGroup >
226+ <_Build Condition =" '@(_CounterLines)' != ''" >@(_CounterLines)</_Build >
227+ <_Build Condition =" '$(_Build)' == ''" >0</_Build >
228+ <_Build >$([MSBuild]::Add($(_Build), 1))</_Build >
229+ </PropertyGroup >
230+
231+ <!-- Write incremented number back to disk -->
232+ <WriteLinesToFile File =" $(_CounterFile)" Lines =" $(_Build)" Overwrite =" true" />
233+
234+ <!-- Stamp the full version -->
235+ <PropertyGroup >
236+ <Version >$(BaseVersion).$(_Build)</Version >
237+ <AssemblyVersion >$(BaseVersion).$(_Build)</AssemblyVersion >
238+ <FileVersion >$(BaseVersion).$(_Build)</FileVersion >
239+ </PropertyGroup >
240+
241+ <Message Text =" ▶ Build number: $(_Build)" Importance =" high" />
242+ </Target >
243+
208244</Project >
0 commit comments