Visual Studio 2022结合SubWCRev自动注入SVN版本号问题咨询
解决VS2022中SubWCRev自动生成SVN版本号到程序版本的问题
SubWCRev仍适用,问题出在VS自动生成AssemblyInfo机制
你的预构建事件本身正常(能生成静态类版本字符串),但程序版本仍取csproj值,核心原因是新版VS(.NET Core/.NET 5+项目默认启用)会自动生成AssemblyInfo文件,覆盖了你通过SubWCRev生成的版本信息。只要调整项目配置禁用自动生成,SubWCRev完全可以继续满足需求。
具体解决步骤
1. 禁用VS自动生成AssemblyInfo
修改项目的Project.csproj文件,添加以下配置,阻止VS自动生成AssemblyInfo:
<PropertyGroup> <!-- 关闭自动生成AssemblyInfo,改用自定义模板生成 --> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup>
2. 调整预构建事件适配多用户
不要写死SubWCRev.exe的绝对路径,通过检测默认安装目录或环境变量来适配不同用户的电脑。以下是预构建事件的示例命令:
:: 优先检测64位和32位TortoiseSVN默认安装路径 set SUBWCREV_PATH="%ProgramFiles%\TortoiseSVN\bin\SubWCRev.exe" if not exist %SUBWCREV_PATH% set SUBWCREV_PATH="%ProgramFiles(x86)%\TortoiseSVN\bin\SubWCRev.exe" :: 如果没找到,提示用户安装TortoiseSVN或添加到PATH if not exist %SUBWCREV_PATH% ( echo ERROR: SubWCRev.exe未找到,请安装TortoiseSVN或将其添加到系统PATH exit /b 1 ) :: 从模板生成AssemblyInfo.cs,使用VS内置宏获取项目路径 %SUBWCREV_PATH% $(ProjectDir) $(ProjectDir)Properties\AssemblyInfo.template.txt $(ProjectDir)Properties\AssemblyInfo.cs
$(ProjectDir)是VS预定义宏,自动指向当前项目根目录,无需手动修改路径- 检测逻辑覆盖了TortoiseSVN的常见安装路径,适配大多数用户的环境
3. 完善AssemblyInfo模板
确保AssemblyInfo.template.txt包含版本相关的属性,示例内容:
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // 主版本.次版本.修订版本.SVN版本号 [assembly: AssemblyVersion("1.0.0.$WCREV$")] [assembly: AssemblyFileVersion("1.0.0.$WCREV$")] // 包含SVN版本和修改状态($WCMODS$会标记是否有未提交修改) [assembly: AssemblyInformationalVersion("1.0.0.$WCREV$ ($WCMODS$)")] // 其他AssemblyInfo属性(如公司名、产品名)按需添加 [assembly: AssemblyCompany("Your Company")] [assembly: AssemblyProduct("Your Product")]
额外注意事项
- 不要将生成的
AssemblyInfo.cs提交到SVN,添加到.svn:ignore列表中,避免版本冲突 - 如果团队成员没有安装TortoiseSVN,可以将
SubWCRev.exe复制到项目的tools目录下,预构建事件改用相对路径调用:$(ProjectDir)tools\SubWCRev.exe - 构建后可通过右键项目→属性→查看应用程序版本,验证SVN版本号是否已正确注入
内容的提问来源于stack exchange,提问作者Slamit
相关产品推荐
相关产品推荐

