将 SVN 工作副本修订号获取到 VersionInfo.cs 中
-
13-11-2019 - |
题
我们 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:RR
和 NN: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
- 将VersionInfo.cs的模板写入存储库而不是最终文件,那么可变的数据部分(适当)subwcrev-关键字
在每个构建过程运行subwcrev中,使用模板和wc-data的实际数据写入最终文件(可以/启动/开始/只为generacicetagcode +
svn export
)
- 将VersionInfo.cs的模板写入存储库而不是最终文件,那么可变的数据部分(适当)subwcrev-关键字
在每个构建过程运行subwcrev中,使用模板和wc-data的实际数据写入最终文件(可以/启动/开始/只为generacicetagcode +
下载 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
.