Error MSB3174:使用%2a自动递增版本号时AssemblyVersion无效如何解决
问题解答
错误原因(对应问题2)
是的,该报错就是你使用%2a直接写入版本号字段导致的。%2a是*符号的URL编码值,你参考的脚本逻辑原本是要将版本号的修订号位替换为通配符*,让MSBuild自动关联ApplicationRevision节点存储的实际修订号。但你的脚本误将URL编码后的%2a直接写入了AssemblyVersion/ApplicationVersion字段,MSBuild识别版本号时无法解析%2a这个非法字符,就会抛出MSB3174错误。你手动修改完AssemblyVersion后仍然报错,大概率是脚本在流水线运行阶段又自动把版本号改回了带%2a的格式,或者你遗漏了修改ApplicationVersion字段(ClickOnce发布场景下会同时读取这两个版本字段)。
解决方法(对应问题1)
- 首先修正你的PowerShell脚本逻辑,所有修改版本号的位置,都把写入的
%2a替换为原始通配符*,比如正确的自动递增版本号格式应为1.0.0.*。 - 检查csproj文件中的所有版本相关节点,包括
AssemblyVersion、FileVersion、ApplicationVersion,确保没有遗留%2a字符,所有版本号要么为全四位数字格式,要么仅使用*作为通配符。 - 如果你需要保留ClickOnce自动关联修订号的逻辑,确认csproj中已经配置了
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>,开启MSBuild自动替换版本号通配符的能力。 - 你也可以直接在Azure流水线的编译命令中传入版本号,避免脚本修改csproj文件带来的异常,比如在dotnet publish或者MSBuild命令后添加参数:
/p:AssemblyVersion=1.0.0.$(Build.BuildId) /p:ApplicationRevision=$(Build.BuildId),直接用流水线的构建ID作为修订号。 - 修正脚本后先在本地用MSBuild手动编译项目,确认没有报错后再推送到流水线运行。
内容的提问来源于stack exchange,提问作者Kaivalya Dambalkar
相关产品推荐
相关产品推荐

