Связывание номера версии SVT версии Tortoise с монтажной версией
Я разрабатываю программу в С#.net в визуальной студии и версии, контролирующую ее с черепаховой SVN.
В настоящее время я создаю версию сборки на основе номера сборки.
Есть ли способ связать последнюю часть версии сборки проекта с номером ревизии в SVN черепахи, например:
псевдокод:
[assembly: AssemblyVersion("1.0.0."+SvnRevisionNumber.ToString())]
Это обеспечит, чтобы мои сборки были названы по имени, а не их номер сборки, но после последнего номера версии, зафиксированного в репозитории.
Ответы
Ответ 1
То, что я использую, вызывает файл cmd при событии post build:
@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 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
Вы можете использовать что-то вроде этого, чтобы получить номер версии svn.
<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}"/>
Он в значительной степени выводит версию svn в xml файл, затем xml заглядывает, чтобы получить номер версии.
Возможно, вы можете использовать это как событие предварительной сборки, а затем обновить сборкуinfo с новым номером версии.
Также проверьте эту тему для получения дополнительной информации.
Версия SVN Revision в .NET Assembly без CC.NET
Ответ 3
Я бы посмотрел в расширительный пакет MSbuild.
Существует расширение Subversion, которое автоматически загрузит материал SVN. Ссылка здесь: MSBuild Subversion Extension Help
Во-вторых, вы можете использовать это с другими расширениями, чтобы программно установить версию каталога. В зависимости от вашего макета в вашей системе SCM вы можете иметь возможность выпускать каждую директорию в своем собственном репозитории, подобном этому.
Ответ 4
Проверьте пробелы и кавычки в файле проекта С#.
<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>