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

为何MSBuild Target设置ApplicationDisplayVersion不生效?求可行方案

问题原因及解决方案

你的代码不生效的核心原因是:Build阶段太晚了。ApplicationDisplayVersion和ApplicationVersion这类版本属性需要在MSBuild更早的阶段被设置,因为项目的版本信息会在Build之前的步骤(比如PrepareForBuild或GenerateAssemblyInfo)就被固化到编译产物中,等到Build阶段再设置已经无法影响最终的版本值。

修正步骤

1. 调整Target的执行时机

把BeforeTargets改为更早的阶段,比如PrepareForBuild(这是MAUI、ASP.NET Core等项目常用的前置阶段,兼容性较好):

<Target Name="CalculateVersionCodeProperties" BeforeTargets="PrepareForBuild">
    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">         
        <ApplicationDisplayVersion>1.2.3</ApplicationDisplayVersion>
        <ApplicationVersion>2</ApplicationVersion>
    </PropertyGroup>
</Target>

2. 从外部源读取版本的示例

如果需要从外部源(比如版本文件、环境变量)读取版本值,可以在Target中添加对应的MSBuild任务:

从文本文件读取版本

假设你有一个version.txt文件,内容是1.2.3:

<Target Name="CalculateVersionCodeProperties" BeforeTargets="PrepareForBuild">
    <!-- 读取版本文件内容 -->
    <ReadLinesFromFile File="version.txt">
        <Output TaskParameter="Lines" ItemName="VersionLines" />
    </ReadLinesFromFile>
    
    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">         
        <ApplicationDisplayVersion>@(VersionLines)</ApplicationDisplayVersion>
        <ApplicationVersion>2</ApplicationVersion>
    </PropertyGroup>
</Target>

从环境变量读取版本

假设你设置了环境变量MY_APP_DISPLAY_VERSION:

<Target Name="CalculateVersionCodeProperties" BeforeTargets="PrepareForBuild">
    <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">         
        <ApplicationDisplayVersion>$(MY_APP_DISPLAY_VERSION)</ApplicationDisplayVersion>
        <ApplicationVersion>2</ApplicationVersion>
    </PropertyGroup>
</Target>

验证方法

  • 构建项目后,查看生成的AssemblyInfo.cs文件(通常在obj目录下),确认AssemblyInformationalVersion是否等于你设置的ApplicationDisplayVersion;
  • 运行项目,调用AppInfo.VersionString查看是否显示正确值;
  • 开启MSBuild详细日志(使用dotnet build -v detailed命令),搜索ApplicationDisplayVersion,确认属性是否在PrepareForBuild阶段被正确设置。

内容的提问来源于stack exchange,提问作者SimonSays

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:45:46