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