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

如何让C# MVC程序读取TortoiseSVN版本号,含TFS迁移方案

一、TortoiseSVN自动写入版本号到文件(提交时触发)

TortoiseSVN自带的SubWCRev.exe可以帮你把版本号写入指定文件,搭配钩子脚本就能在提交时自动执行。

1. 准备工作

  • 确认SubWCRev.exe路径:默认在C:\Program Files\TortoiseSVN\bin\SubWCRev.exe,如果安装路径不同,自行替换。
  • 为目标文件创建模板文件(避免直接覆盖原文件),模板里用SubWCRev的变量占位,常用变量:
    • $WCREV$:当前工作副本的最新版本号
    • $WCDATE$:最后更新日期

示例1:生成Web可访问的文本文件

  1. 在项目根目录创建VersionTemplate.txt,内容:
当前SVN版本号:$WCREV$
最后更新时间:$WCDATE$
  1. 创建批处理文件UpdateVersion.bat,内容:
@echo off
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" . VersionTemplate.txt Version.txt
  1. 设置TortoiseSVN预提交钩子:
    • 右键项目文件夹 → TortoiseSVN → 设置 → 钩子脚本
    • 点击「添加」,选择「预提交钩子」,浏览选择刚才的UpdateVersion.bat
    • 提交代码时,脚本会自动生成Version.txt到项目根目录,Web应用可直接读取。

示例2:修改AssemblyInfo.cs

  1. 备份Properties\AssemblyInfo.cs,然后创建Properties\AssemblyInfoTemplate.cs,修改版本号行:
[assembly: AssemblyVersion("1.0.$WCREV$.0")]
[assembly: AssemblyFileVersion("1.0.$WCREV$.0")]
  1. 修改UpdateVersion.bat内容:
@echo off
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" . Properties\AssemblyInfoTemplate.cs Properties\AssemblyInfo.cs
  1. 同样设置预提交钩子,提交时会自动替换版本号到AssemblyInfo.cs,编译后程序集版本会包含SVN号。

示例3:修改web.config

  1. 备份web.config,创建WebConfigTemplate.config,添加版本号配置节点:
<appSettings>
  <!-- 其他配置 -->
  <add key="SVNVersion" value="$WCREV$" />
</appSettings>
  1. 修改UpdateVersion.bat内容:
@echo off
"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" . WebConfigTemplate.config Web.config
  1. 设置预提交钩子,提交后web.config会自动更新版本号,代码可通过ConfigurationManager.AppSettings["SVNVersion"]读取。
二、通过代码读取.svn目录获取版本号

不依赖钩子脚本的话,可以直接读取.svn目录的信息,这里提供两种可靠方法:

方法1:调用SubWCRev命令行

在C#代码中直接执行SubWCRev获取版本号,无需操作.svn文件:

using System.Diagnostics;
using System;

public static class SvnHelper
{
    public static string GetCurrentSvnVersion()
    {
        var subWCRevPath = @"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe";
        var workingDir = AppDomain.CurrentDomain.BaseDirectory;

        var processStartInfo = new ProcessStartInfo
        {
            FileName = subWCRevPath,
            Arguments = $"{workingDir} -n", // -n参数只输出版本号
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };

        using (var process = Process.Start(processStartInfo))
        {
            process.WaitForExit();
            return process.StandardOutput.ReadToEnd().Trim();
        }
    }
}

方法2:读取.svn的SQLite数据库

新版本TortoiseSVN用wc.db(SQLite数据库)存储版本信息,可通过SQLite库读取(需添加System.Data.SQLite NuGet包):

using System.Data.SQLite;
using System;

public static class SvnHelper
{
    public static string GetSvnVersionFromDb()
    {
        var dbPath = $@"{AppDomain.CurrentDomain.BaseDirectory}.svn\wc.db";
        using (var conn = new SQLiteConnection($"Data Source={dbPath};Version=3;"))
        {
            conn.Open();
            var cmd = new SQLiteCommand("SELECT revision FROM NODES WHERE local_relpath = '.'", conn);
            var result = cmd.ExecuteScalar();
            return result?.ToString() ?? "未知版本";
        }
    }
}
三、迁移到TFS后获取版本号的方法

TFS(现名Azure DevOps Server)可以通过构建流水线或代码读取版本号:

1. 构建时写入版本号到文件/配置

  • 写入文本文件:在TFS构建流水线中添加「PowerShell」任务,脚本示例:
# 获取TFS构建编号(可在流水线变量中自定义格式)
$buildVersion = "$(Build.BuildNumber)"
# 写入到版本文件
Add-Content -Path "$(Build.ArtifactStagingDirectory)\TFSVersion.txt" -Value $buildVersion
  • 修改AssemblyInfo.cs:添加「Assembly Info」任务,设置版本号格式为1.0.$(Build.BuildId).0,构建时自动替换程序集版本。
  • 修改web.config:用「替换令牌」任务,在web.config中预留#{TFSVersion}#占位符,流水线中设置变量TFSVersion=$(Build.BuildNumber),构建时自动替换。

2. 代码读取TFS版本号

  • 读取程序集版本(构建时已写入):
using System.Reflection;
using System.Diagnostics;

public static class TfsHelper
{
    public static string GetTfsAssemblyVersion()
    {
        var assembly = Assembly.GetExecutingAssembly();
        var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);
        return fileVersion.FileVersion;
    }
}
  • 读取web.config中的配置:
using System.Configuration;

public static class TfsHelper
{
    public static string GetTfsVersionFromConfig()
    {
        return ConfigurationManager.AppSettings["TFSVersion"];
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:50:56