我们 SLN 中的所有项目共享一个 VersionInfo.cs,其中保存项目版本号

[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]

我想静态定义版本号的前 3 部分,最后一部分我想成为工作副本 SVN 修订版。

第一步是在 VS 中定义一个触发 cmd 脚本的预构建事件,是否有一种简单的方法可以从 cmd 获取工作副本修订版?

第二步是将数字插入到 VersionInfo.cs 文件中

可能有更优雅的方法来做到这一点,如果您有一个,请记住这是一个开源项目,我们没有花哨的构建服务器或类似的东西。部署过程只是将项目置于发布模式并构建:D

有帮助吗?

解决方案 3

HMJD:S解决方案只有一半,如果您每次构建引用版本文件的所有项目都需要重建,即使没有改变,我也会改变脚本,只要写入文件新修订号

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B

SET file=../VersionInfo.cs

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

set result=0

for /f "tokens=3" %%f in ('find /c /i ".%SVN_REV%." %file%') do set result=%%f

IF %result% gtr 0 (
GOTO end
)

ECHO using System.Reflection; > %file%
ECHO [assembly: AssemblyVersion("0.1.%SVN_REV%.0")]     >>  %file%
ECHO [assembly: AssemblyFileVersion("0.1.%SVN_REV%.0")] >> %file%

:end
.

其他提示

有没有一种简单的方法可以从 cmd 获取工作副本修订版?

有一个可执行文件名为 svnversion.exe 在标准输出上打印修订版本。如果您确保这在您的 PATH 你可以这样称呼。

将该编号插入 VersionInfo.cs 文件中

你可以生成 VesionInfo.cs 从批处理文件中完全或部分归档:

@echo off

FOR /F %%A in ('svnversion') do SET SVN_REV=%%A

echo [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
echo [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs

编辑:

更新了批处理文件以应对格式的修订号 RR, NN:RRNN:RRM 在哪里 NN 是一个整数并且 RR 是修订版:

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion') do SET PART_1=%%A&SET PART_2=%%B

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

ECHO [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
ECHO [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs
  • 如果它是VisualStudio,它是Windows
  • 如果它是Windows,您可以使用Tortoisesvn 的Subwcrev

    1. 将VersionInfo.cs的模板写入存储库而不是最终文件,那么可变的数据部分(适当)subwcrev-关键字 在每个构建过程运行subwcrev中,使用模板和wc-data的实际数据写入最终文件(可以/启动/开始/只为generacicetagcode + svn export

下载 MSBuild 社区任务 并安装它。

打开你的 .csproj 并在最后(在关闭之前 </project> 标签)

粘贴以下代码(不要更改 <Import> 标签):

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

之后 <Import> 标签粘贴以下内容:

  <Target Name="BeforeBuild">
      <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\TortoiseSVN\bin">
          <Output TaskParameter="Revision" PropertyName="Revision" />
      </SvnVersion>
      <FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" />
  </Target>

看属性 刀具路径 在 SvnVersion 标记内,您必须确定计算机中的位置 svn版本.exe 二进制文件。

假设您已经安装了TortoiseSVN软件,它的路径是: C:\ProgramFiles\TortoiseSVN\bin\您还可以使用 VisualSVN 二进制文件(在本例中,二进制文件位于 C:\ProgramFiles\VisualSVN\bin\)

通过在 .csproj 中进行此修改,在每个构建项目中,MSBuild 将首先调用 svnversion.exe(带参数,当前解决方案目录),并且 svnversion 将返回该存储库的修订号。在 FileUpdate 标记中,MSBuild 将查找正则表达式模式,然后替换为 Major、Minor 和 Build 的当前值(分别为 $1、$2 和 $3),并使用变量 Revision 值更新 Revision

您可以尝试使用关键词替换符在您提交时更换该号码。他们有这个例子:

$Rev$:     Revision of last commit
$Author$:  Author of last commit
$Date$:    Date of last commit
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top