You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:43:14