Linking Tortoise SVN revision number to assembly version

泄露秘密 提交于 2019-12-18 12:19:26

问题


I'm developing a program in C# .net in visual studio and version controlling it with tortoise SVN.

at present I'm creating the assembly version based on the build number.

Is there a way I can link the final part of a projects assembly version to the revision number in tortoise SVN instead, eg:

pseudo code:

[assembly: AssemblyVersion("1.0.0."+SvnRevisionNumber.ToString())]

This would ensure that my assemblies were named after, not their build number, but after the last revision number committed to the repository.


回答1:


What I use is calling a cmd file at the post build event:

@echo off

if %1x==x goto ERROR

SET ProjectDir=%1
SET SubWCRev="C:\Program Files\TortoiseSVN\bin\SubWCRev.exe"
if exist %SubWCRev% goto USESUBWCREV

REM Default to copying a default version
copy %ProjectDir%\Properties\AssemblyInfo.default.cs %ProjectDir%\Properties\AssemblyInfo.cs
echo default
goto END

REM We don't want to modify AssemblyInfo.cs every time, only when a revision
REM changes. Thus, we want to first compare the last compiled revision with
REM the current revision, and only update if they've changed.
:USESUBWCREV
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\rev.subwcrev-template %ProjectDir%\Properties\rev.current.tmp
if exist %ProjectDir%\Properties\rev.last-build.tmp goto CHECKREV
goto NEWREV

REM Fetch the current revision and compare to last-build revision
:CHECKREV
fc %ProjectDir%\Properties\rev.last-build.tmp %ProjectDir%\Properties\rev.current.tmp > NUL
REM Only update if it's a new revision
if errorlevel 1 goto NEWREV
goto END

REM Current revision doesn't match last-build revision. Update!
:NEWREV
echo newRev
if exist %ProjectDir%\Properties\rev.last-build.tmp del %ProjectDir%\Properties\rev.last-build.tmp
copy %ProjectDir%\Properties\rev.current.tmp rev.last-build.tmp
echo use template
%SubWCRev% %ProjectDir% %ProjectDir%\Properties\AssemblyInfo.subwcrev-template.cs %ProjectDir%\Properties\AssemblyInfo.cs
echo done
goto END

:ERROR
echo Usage: %0 project_dir
echo.
echo For example:
echo    %0 C:\projects\MyProjectDir
echo.
goto END

:END



回答2:


You can use something like this to get the svn revision number.

<echo message="Retrieving Subversion command line: ${rvsnCommandLine} into ${deployment.SourceDir}"/>
     <exec program="svn.exe" workingdir="${deployment.SourceDir}" commandline='update ${rvsnCommandLine}' failonerror="false"/>

     <echo message="Retrieving Subversion revision number ${svn.revision}"/>
     <exec
       program="svn.exe"
       commandline='log "${deployment.SourceDir}" ${rvsnCommandLine} --xml --limit 1'
       output="${deployment.SourceDir}\_revision.xml"
       failonerror="false"/>
     <xmlpeek
       file="${deployment.SourceDir}\_revision.xml"
       xpath="/log/logentry/@revision"
       property="svn.revision"
       failonerror="false"/>
     <echo message="Using Subversion revision number: ${svn.revision}"/>

It pretty much outputs the svn revision to a xml file then xml peeks to get the revision number.

You could perhaps use this as a pre-build event and then update your assemblyinfo with the new version number.

Also check this thread for more info SVN Revision Version in .NET Assembly w/ out CC.NET




回答3:


I'd be looking into the MSbuild Extension Pack.

There is a Subversion extension which will retrieve the SVN stuff for you automatically. Link here: MSBuild Subversion Extension Help

Secondly you could then use that with other extensions to set the version of a directory programatically. Depending on your layout in your SCM system, you might be able to version each directory in it's own repository like this.




回答4:


Check the spaces and quotes in C#Project file.

<PreBuildEvent>
        if exist "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.Base.cs" "$(ProjectDir)Properties\AssemblyInfo.cs"
</PreBuildEvent>


来源:https://stackoverflow.com/questions/17713513/linking-tortoise-svn-revision-number-to-assembly-version

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!