我们SLN中的所有项目共享一个VersionInfo.cs,其中包含项目版本号
[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]
我想静态定义版本号的3个第一部分,最后部分我想成为SVN版本的工作副本。
第一步是在VS中定义一个触发cmd脚本的预构建事件,是否有一种从cmd获取工作副本修订版的简单方法?
第二步是将该号码插入VersionInfo.cs文件
Theres可能是更优雅的方式,如果你有一个在商店,请记住这是一个开源项目,我们没有一个花哨的构建服务器或类似的东西。部署过程只是将项目置于发布模式并构建:D
答案 0 :(得分:2)
是否有一种简单的方法可以从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
答案 1 :(得分:1)
如果是Windows,可以使用TortoiseSVN的SubWCRev
svn export
+ subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs
)答案 2 :(得分:1)
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
答案 3 :(得分:1)
下载MSBuild Community Task并安装。
打开你的.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标记内的属性 ToolPath ,您必须在其中确定计算机中 svnversion.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 value更新版本
答案 4 :(得分:0)
您可以尝试使用Keyword Substitutes替换您提交的号码。他们以此为例:
$Rev$: Revision of last commit
$Author$: Author of last commit
$Date$: Date of last commit