Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 正在将SVN工作副本修订号获取到VersionInfo.cs_Visual Studio 2010_Svn_Revision_Assemblyinfo - Fatal编程技术网

Visual studio 2010 正在将SVN工作副本修订号获取到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

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=../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

hmjd:s的解决方案只有一半,如果每次构建引用版本文件的所有项目时都要写入该文件,即使没有任何更改,也需要重新生成,那么我将脚本更改为仅在新版本号时写入该文件

[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