Я согласен с комментариями о том, что $ Revision $ не является подходящим инструментом для работы. Использование инструмента для извлечения номера ревизии из вывода svn info действительно правильная вещь.
Однако следует отметить еще две вещи:
svn info вернет правильную информацию, только если svn update было запущено в каталоге с установленным из источников. Если вы используете пользовательские шаги сборки, вам, вероятно, следует добавить команду для этого.
svn info также предоставляет информацию о пути к хранилищу. Это единственный способ провести различие между источниками в trunk и где-то еще, как в tags . Если вы хотите, чтобы в поле «О программе» содержалась строка для правильной идентификации источников, использованных для сборки приложения, убедитесь, что путь к репозиторию также доступен.
Edit:
Это командный скрипт, который следует скопировать в каталог верхнего уровня проекта. Он обновит источники из репозитория, получит номер ревизии SVN из вызова svn info и сравнит его с константой SVN_REVISION из файла src \ SvnRev.inc . Если файл отсутствует, он создаст его, если ревизия отличается, он перезапишет его. Если svn недоступен, он запишет номер версии 0 в файл.
Полученный файл src \ SvnRev.inc может быть просто включен в исходный файл. Аналогичный файл может быть создан для включения в ресурс версии.
@echo off
setlocal
rem determine project top level directory from command file name
set PRJDIR=%~dp0
cd %PRJDIR%
set SVNREVFILE=src\SvnRev.inc
rem execute "svn info", extract "Revision: 1234" line, and take SVN rev from there
svn update
for /F " usebackq tokens=1,2 delims=: " %%i in (`svn info`) do set key=%%i&set value=%%j&call :read-svn-rev
@echo SVN revision "%SVNREV%"
rem extract "const SVN_REVISION = 1234;" line, and take header SVN rev from there
for /F " usebackq tokens=2,4 " %%i in (%SVNREVFILE%) do set name=%%i&set value=%%j&call :read-file-rev
@echo Include file revision "%FILEREV%"
rem check for valid SVN rev
if "%SVNREV%" EQU "" goto :no-svn-ref
rem do not write file if SVN ref is equal
if "%FILEREV%" EQU "%SVNREV%" goto :EOF
@echo Writing svn revision %SVNREV% to %SVNREVFILE%
@echo const SVN_REVISION = %SVNREV% ; > %SVNREVFILE%
goto :EOF
:no-svn-ref
if not exist %SVNREVFILE% goto :no-header-file
rem do not write file if SVN ref is already unset
if "%FILEREV%" EQU "0" goto :EOF
@echo Writing svn revision 0 to %SVNREVFILE%
goto :write-no-version
:no-header-file
@echo Creating %SVNREVFILE% with svn revision 0
:write-no-version
@echo const SVN_REVISION = 0 ; > %SVNREVFILE%
goto :EOF
endlocal
goto :EOF
:read-svn-rev
if "%key%" EQU "Revision" set SVNREV=%value%&
goto :EOF
:read-file-rev
if "%name%" EQU "SVN_REVISION" set FILEREV=%value%&
goto :EOF