Visual studio 2010 正在将SVN工作副本修订号获取到VersionInfo.cs
SLN中的所有项目都共享一个VersionInfo.cs,其中包含项目版本号Visual studio 2010 正在将SVN工作副本修订号获取到VersionInfo.cs,visual-studio-2010,svn,revision,assemblyinfo,Visual Studio 2010,Svn,Revision,Assemblyinfo,SLN中的所有项目都共享一个VersionInfo.cs,其中包含项目版本号 [assembly: AssemblyVersion("0.0.1.0")] [assembly: AssemblyFileVersion("0.0.1.0")] @ECHO off FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B SET file=../VersionI
[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]
@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
我想静态地定义版本号的前三部分,最后一部分是SVN修订版的工作副本
第一步是在VS中定义一个触发cmd脚本的预构建事件,有没有一种简单的方法从cmd获取工作副本修订版
第二步是将该编号插入VersionInfo.cs文件
也许有更优雅的方法可以做到这一点,如果你在商店里有一个,请记住这是一个开源项目,我们没有一个奇特的构建服务器或类似的东西。部署过程只是将项目置于发布模式并生成:D
有没有一种简单的方法可以从cmd获取工作副本修订版
有一个名为svversion.exe
的可执行文件,它在标准输出上打印修订版。如果您确保这是在您的路径中
,您可以调用它
将该编号插入VersionInfo.cs文件
您可以从批处理文件中完全或部分生成vesinfo.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
您可以尝试在提交时使用替换号码。例如:
$Rev$: Revision of last commit
$Author$: Author of last commit
$Date$: Date of last commit
- 如果是VisualStudio,那就是Windows
- 如果是Windows,您可以使用OrtoiseSVN的SubWCRev
- 将VersionInfo.cs的模板写入存储库而不是最终文件,其中可更改的部分数据被(适当的)SubWCRev关键字替换
- 在每个构建过程中运行SubWCRev,它使用模板中的实际数据和WC数据编写最终文件(完整构建器可以/启动/只需
+svn export
)SubWCRev WC path VersionInfo.cs.tpl VersionInfo.cs
[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]
@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
下载并安装它
打开你的.csproj并在结尾处(在结束之前
标记)
粘贴以下代码(不要更改
标记):
在
标记后粘贴以下内容:
<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,您必须在其中标识机器中svinversion.exe二进制文件的位置
假设您已经安装了TortoiseSVN软件,那么它的路径是:C:\ProgramFiles\TortoiseSVN\bin\
您还可以使用VisualSVN二进制文件(在本例中,二进制文件位于C:\ProgramFiles\VisualSVN\bin\
)
在.csproj中进行此修改后,在每个生成项目中,MSBuild将首先调用svnversion.exe(带参数,当前解决方案目录),svnversion将返回该存储库的修订号。在FileUpdate标记中,MSBuild将查找regex模式,然后替换为Major、Minor和Build的当前值(分别为$1、2和$3)并使用变量Revision值更新修订版本要使其生效,您需要每次更新VersionFile.cs以获得新修订版本,$Rev$仅在实际文件更改时反映…$Rev$关键字扩展为bad(用于此任务)字符串,如
$Revision:1028$
感谢您的反馈,我下载了svinversion.exe,它以33:37M的格式输出,其中37是修订版,因此您的批处理脚本将创建一个无效的版本号,我正在考虑创建一个小小的C#console程序,并在那里解析修订版和创建文件,但这可能有些过分,有更好的方法吗?@Anders,修改DOS以提取修订号后,更新了答案。@Anders-您有混合工作副本。“这是故意的吗?”安德斯-你有混合工作副本。我刚从sourceforge SVN和TortoiseSVN结帐,我不是SVN专家:D这是回购协议svn://svn.code.sf.net/p/freepie/code/trunk