如何在Advanced Installer中同步.NET应用的完整自动生成AssemblyVersion
如何让Advanced Installer同步.NET应用1.0.*自动生成的完整AssemblyVersion
方法1:调整.NET项目版本配置,让Advanced Installer读取文件版本
当你把.NET项目的AssemblyVersion设为1.0.*时,编译后CLR会自动生成Build和Revision位,但如果项目同时手动指定了固定的AssemblyFileVersion(比如1.0.0.0),Advanced Installer默认读取的文件版本就会是固定值。你需要确保文件版本同步自动生成的版本:
传统.NET Framework项目(AssemblyInfo.cs)
打开Properties/AssemblyInfo.cs,删除或注释手动的AssemblyFileVersion定义,保留自动生成的AssemblyVersion:
[assembly: AssemblyVersion("1.0.*")] // 移除或注释这一行:[assembly: AssemblyFileVersion("1.0.0.0")]
编译后,exe的文件版本(FileVersion)会和AssemblyVersion一致,包含自动生成的后两位。
SDK风格项目(.NET Core/.NET 5+,csproj)
在项目文件中设置以下属性,让版本自动同步:
<Version>1.0.*</Version> <AssemblyVersion>1.0.*</AssemblyVersion> <FileVersion>$(Version)</FileVersion>
在Advanced Installer中配置版本读取
- 打开AI项目,进入Product Information页面
- 找到Version字段,点击右侧的
...按钮 - 在弹出的“Select Version Source”窗口中,选择File Version,选中你的
myApp.exe - 保存项目后重新构建,AI会读取exe的完整自动生成版本。
方法2:使用自定义动作手动读取并设置版本
如果方法1不生效,可以通过自定义动作在安装包构建时动态读取exe的完整版本:
- 打开AI项目,切换到Custom Actions页面
- 在Install Execution Stage的Begin阶段之前,添加一个VBScript自定义动作
- 输入以下脚本内容:
Set objFSO = CreateObject("Scripting.FileSystemObject") strExePath = Session.Property("[#myApp.exe]") If objFSO.FileExists(strExePath) Then Set objFile = objFSO.GetFile(strExePath) Session.Property("ProductVersion") = objFile.Version End If
- 将自定义动作的Execution Condition设为
NOT Installed(仅在首次安装时执行) - 保存并重新构建项目。
方法3:用预构建事件提前设置AI项目版本
这种方法适合需要在构建安装包前就把版本写入AI项目的场景:
- 打开AI项目,点击Build菜单,选择Pre-build Events
- 添加以下PowerShell命令(替换路径为你的实际exe和AI项目路径):
# 读取编译后exe的完整版本 $exePath = "C:\Path\To\Your\Compiled\myApp.exe" $fullVersion = (Get-Item $exePath).VersionInfo.ProductVersion # 修改AI项目的ProductVersion属性 & "C:\Program Files (x86)\Caphyon\Advanced Installer\bin\x86\AdvancedInstaller.com" /edit "C:\Path\To\Your\Project.aip" /SetProperty ProductVersion=$fullVersion
- 保存项目,构建时AI会先执行预构建事件,更新版本后再打包。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

