Visual Studio 2026 C# 專案 軟體版號修改
Visual Studio 2026 C# 專案 軟體版號修改
資料來源: https://gemini.google.com/share/596db2a51137
使用FileVersion來記錄開發版本(手動修改)+Version記錄編譯時間(自動調整),藉此實現明確簡易檢視『該版本是在何時編譯』的解決方案
核心設定區域
<!-- 專案編譯版本資訊設定 start -->
<PropertyGroup Label="Avalonia">
<AvaloniaXamlIlDebuggerLaunch>False</AvaloniaXamlIlDebuggerLaunch>
<AvaloniaXamlVerboseExceptions>False</AvaloniaXamlVerboseExceptions>
<FileVersion>2.0.0.0</FileVersion>
</PropertyGroup>
<PropertyGroup>
<Builyyyy>$([System.DateTime]::Now.ToString("yyyy"))</Builyyyy>
<BuilMMdd>$([System.DateTime]::Now.ToString("MMdd"))</BuilMMdd>
<BuildHHmm>$([System.DateTime]::Now.ToString("HHmm"))</BuildHHmm>
<Buildss>$([System.DateTime]::Now.ToString("ss"))</Buildss>
<BaseVer>$(Builyyyy).$(BuilMMdd).$(BuildHHmm).$(Buildss)</BaseVer>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<Version>$(BaseVer)</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<Version>$(BaseVer)-debug</Version>
</PropertyGroup>
<!-- 專案編譯版本資訊設定 end -->
完整專案檔
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
<AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
<Platforms>AnyCPU;x64;x86</Platforms>
<ApplicationIcon>sys.ico</ApplicationIcon>
<AssemblyName>VPOS</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>False</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>False</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>False</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>True</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>True</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<Deterministic>True</Deterministic>
<Optimize>True</Optimize>
<DebugType>full</DebugType>
</PropertyGroup>
<!-- 專案編譯版本資訊設定 start -->
<PropertyGroup Label="Avalonia">
<AvaloniaXamlIlDebuggerLaunch>False</AvaloniaXamlIlDebuggerLaunch>
<AvaloniaXamlVerboseExceptions>False</AvaloniaXamlVerboseExceptions>
<FileVersion>2.0.0.0</FileVersion>
</PropertyGroup>
<PropertyGroup>
<Builyyyy>$([System.DateTime]::Now.ToString("yyyy"))</Builyyyy>
<BuilMMdd>$([System.DateTime]::Now.ToString("MMdd"))</BuilMMdd>
<BuildHHmm>$([System.DateTime]::Now.ToString("HHmm"))</BuildHHmm>
<Buildss>$([System.DateTime]::Now.ToString("ss"))</Buildss>
<BaseVer>$(Builyyyy).$(BuilMMdd).$(BuildHHmm).$(Buildss)</BaseVer>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<Version>$(BaseVer)</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<Version>$(BaseVer)-debug</Version>
</PropertyGroup>
<!-- 專案編譯版本資訊設定 end -->
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
<ItemGroup>
<Content Include="sys.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="AnimatedImage.Avalonia" Version="2.1.2" />
<PackageReference Include="Avalonia" Version="11.3.9" />
<PackageReference Include="Avalonia.Controls.DataGrid" Version="11.3.9" />
<PackageReference Include="Avalonia.Desktop" Version="11.3.9" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="11.3.9" />
<PackageReference Include="Avalonia.Fonts.Inter" Version="11.3.9" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="11.3.9" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="Costura.Fody" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Dapper" Version="2.1.66" />
<PackageReference Include="Jint" Version="3.0.1" />
<PackageReference Include="Microsoft.NET.ILLink.Tasks" Version="10.0.1" />
<PackageReference Include="NAudio" Version="2.2.1" />
<PackageReference Include="SkiaSharp" Version="3.119.1" />
<PackageReference Include="SkiaSharp.NativeAssets.Win32" Version="3.119.1" />
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
<PackageReference Include="System.Drawing.Common" Version="10.0.1" />
<PackageReference Include="System.IO.Ports" Version="10.0.1" />
<PackageReference Include="System.Management" Version="10.0.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="10.0.1" />
<PackageReference Include="ZXing.Net" Version="0.16.11" />
<PackageReference Include="ZXing.Net.Bindings.Windows.Compatibility" Version="0.16.14" />
</ItemGroup>
<ItemGroup>
<None Update="cleanup.bat">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="SQLite3.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<!-- 新增一個全域的後建目標 -->
<Target Name="CleanupAfterBuild" AfterTargets="Build;Rebuild;Publish">
<Exec Command="cmd /c "$(TargetDir)cleanup.bat"" />
<Exec Command="cmd /c del "$(TargetDir)cleanup.bat"" />
<Exec Command="cmd /c del "$(TargetDir)log.txt"" />
<Exec Command="cmd /c del "$(TargetDir)VPOS.pdb"" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="echo Release@@x86
if "$(ConfigurationName)" == "Release" (if "$(PlatformName)" == "x86" ("$(ProjectDir)_Obfuscar\Obfuscar.Console.exe" "$(ProjectDir)_Obfuscar\obfuscar_Release_x86.xml"
xcopy /e /v "$(ProjectDir)bin\x86\Release\net10.0\\Out\" "$(ProjectDir)bin\x86\Release\net10.0\" /Y))" />
</Target>
</Project>