在Visual Studio中构建C#应用时如何将版本信息嵌入可执行文件名
在Visual Studio中构建C#应用时如何将版本信息嵌入可执行文件名
嗨,很高兴你已经搞定了基础的输出文件名配置!要把AssemblyInformationalVersion或者AssemblyVersion里的版本号嵌入到可执行文件名里,比如生成Demo_v1.0.0.0.exe这样的文件,针对Visual Studio 2017 Express和C# WinForms项目,我给你分享两种实用的方法:
方法一:编辑项目文件(.csproj)实现自动命名
这种方法能让构建过程直接生成带版本号的exe,不用额外复制重命名,步骤如下:
- 右键你的项目,选择「卸载项目」
- 再次右键已卸载的项目,选择「编辑xxx.csproj」(xxx是你的项目名)
- 在文件里添加以下XML代码块,放在现有
<Project>标签内部即可:
<Target Name="SetVersionedOutputName" BeforeTargets="CoreCompile"> <!-- 获取当前项目构建的程序集版本号 --> <GetAssemblyIdentity AssemblyFiles="$(IntermediateOutputPath)$(TargetFileName)"> <Output TaskParameter="Assemblies" ItemName="AssemblyIdentities" /> </GetAssemblyIdentity> <!-- 设置输出文件名,把版本号拼接进去 --> <PropertyGroup> <!-- 这里用AssemblyVersion,如果想用AssemblyInformationalVersion,可以改成%(AssemblyIdentities.InformationalVersion) --> <VersionNumber>%(AssemblyIdentities.Version)</VersionNumber> <OutputName>Demo_v$(VersionNumber)</OutputName> </PropertyGroup> </Target>
- 保存文件,右键项目选择「重新加载项目」
下次构建时,输出的可执行文件就会自动带上版本号啦。如果想用AssemblyInformationalVersion的版本,只需要把<VersionNumber>那行的Version改成InformationalVersion就行。
方法二:用后构建事件重命名文件
如果不想编辑项目文件,也可以用Visual Studio的构建事件来实现,步骤更直观:
- 右键项目选择「属性」,切换到「生成事件」标签页
- 在「后生成事件命令行」里输入以下PowerShell命令(PowerShell处理版本号比批处理更灵活):
# 从AssemblyInfo.cs中读取AssemblyInformationalVersion的版本值 $version = (Get-Content "$(ProjectDir)Properties\AssemblyInfo.cs" | Select-String 'AssemblyInformationalVersion\("([^"]+)"\)').Matches.Groups[1].Value # 重命名生成的可执行文件 Rename-Item -Path "$(TargetPath)" -NewName "Demo_v$version.exe"
- 如果你想使用
AssemblyVersion的版本,只需要把命令里的AssemblyInformationalVersion替换成AssemblyVersion即可 - 点击「确定」保存设置,下次构建完成后,程序会自动把生成的exe重命名为带版本号的版本
小提示
- 注意版本号里如果有特殊字符(比如预发布标签
1.0.0-beta),重命名时可能需要调整命令,避免出现不合法的文件名 - 测试前可以先清理项目(菜单「生成」->「清理解决方案」),再重新构建,确保文件名更新生效
备注:内容来源于stack exchange,提问作者Fabiano Augusto
相关产品推荐
相关产品推荐

