Visual Studio 2022项目相关属性存储位置咨询(AssemblyInfo)
.NET 项目版本号管理的标准实现方案
针对你需要的可手动编辑+构建/Git事件触发修改的版本变量(Major/Minor手动更新,LastGitHash Git推送后更新,BuildNumber构建递增、推送重置),目前.NET生态有几个替代AssemblyInfo的标准方案:
1. 用 Directory.Build.props 管理核心版本变量
这是.NET SDK项目的标准配置文件,可直接定义MSBuild变量,既支持手动编辑,也能被脚本批量修改:
基础配置示例
在项目根目录创建Directory.Build.props文件,写入:
<Project> <PropertyGroup> <!-- 手动维护的主版本号 --> <VersionMajor>1</VersionMajor> <!-- 手动维护的次版本号 --> <VersionMinor>2</VersionMinor> <!-- Git哈希和构建号初始值,后续由脚本修改 --> <VersionGitHash>unknown</VersionGitHash> <VersionBuild>0</VersionBuild> <!-- 组合生成VersionPrefix --> <VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionBuild)-$(VersionGitHash)</VersionPrefix> </PropertyGroup> </Project>
这个文件会被.NET SDK自动加载,你可以在项目构建属性里直接引用$(VersionPrefix),也能在代码中通过AssemblyInformationalVersionAttribute读取最终版本值。
2. 结合自定义配置文件+MSBuild任务实现动态更新
如果需要将版本数据单独存储(方便脚本定位修改),可以创建一个VersionConfig.json文件:
{ "Major": 1, "Minor": 2, "LastGitHash": "unknown", "BuildNumber": 0 }
接着在Directory.Build.props中添加MSBuild任务,读取这个配置文件并赋值给MSBuild变量:
<Project> <PropertyGroup> <VersionConfigPath>$(MSBuildProjectDirectory)/VersionConfig.json</VersionConfigPath> </PropertyGroup> <Target Name="ReadVersionConfig" BeforeTargets="InitializeBuild"> <ReadLinesFromFile File="$(VersionConfigPath)"> <Output TaskParameter="Lines" ItemName="VersionConfigLines" /> </ReadLinesFromFile> <PropertyGroup> <VersionConfigJson>@(VersionConfigLines)</VersionConfigJson> <VersionMajor>$([System.Text.Json.JsonDocument]::Parse('$(VersionConfigJson)').RootElement.GetProperty('Major').GetInt32())</VersionMajor> <VersionMinor>$([System.Text.Json.JsonDocument]::Parse('$(VersionConfigJson)').RootElement.GetProperty('Minor').GetInt32())</VersionMinor> <VersionGitHash>$([System.Text.Json.JsonDocument]::Parse('$(VersionConfigJson)').RootElement.GetProperty('LastGitHash').GetString())</VersionGitHash> <VersionBuild>$([System.Text.Json.JsonDocument]::Parse('$(VersionConfigJson)').RootElement.GetProperty('BuildNumber').GetInt32())</VersionBuild> <VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionBuild)-$(VersionGitHash)</VersionPrefix> </PropertyGroup> </Target> </Project>
3. 脚本自动化修改逻辑
针对Git推送后更新LastGitHash、构建时递增BuildNumber的需求,可编写简单的PowerShell/Bash脚本绑定到对应事件:
Git推送后更新Hash并重置构建号的PowerShell脚本
$gitHash = git rev-parse --short HEAD $configPath = "./VersionConfig.json" $config = Get-Content $configPath | ConvertFrom-Json $config.LastGitHash = $gitHash $config.BuildNumber = 0 # 推送时重置构建号 $config | ConvertTo-Json | Set-Content $configPath git add $configPath git commit -m "Update version hash and reset build number"
构建前递增BuildNumber的PowerShell脚本
$configPath = "./VersionConfig.json" $config = Get-Content $configPath | ConvertFrom-Json $config.BuildNumber += 1 $config | ConvertTo-Json | Set-Content $configPath
将第一个脚本绑定到Git的post-push钩子,第二个脚本添加到CI/CD构建流程的前置步骤即可实现自动化。
为什么不推荐用Resources.resx?
.resx文件主要用于存储应用运行时的本地化资源,虽然支持手动编辑,但MSBuild读取和修改它的成本更高,且不符合版本号管理的常规实践,容易和业务资源混淆。
内容的提问来源于stack exchange,提问作者Yannick
相关产品推荐
相关产品推荐

