2013-07-18 2 views
15

Я разрабатываю программу в C# .net в визуальной студии и версии, контролирующую ее с черепаховой SVN.Ссылка на номер версии SVN для версии Tortoise до версии сборки

В настоящее время я создаю версию сборки на основе номера сборки.

Есть ли способ, я могу связать заключительную часть версии сборки проектов на номер ревизии в Tortoise SVN вместо этого, например:

псевдо-код:

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

Это будет гарантировать, что мои сборки были названы в честь, а не их номером сборки, но после последнего номера версии, зафиксированного в репозитории.

ответ

9

Что я использую вызов CMD-файл на события после сборки:

@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

Хороший сценарий, я использовал его, но обнаружил проблему, когда она вызывается событием сборки, как это: UpdateSvnVerToAssembly.bat «$ (ProjectDir)» $ (ProjectDir) содержит слэш, но SubWCRev имеет ошибка, которая терпит неудачу на путях, содержащих пробелы и конечную косую черту. Обходным путем является вставка слова «.». после завершающего косая черта, а также котировки на всех путях, так что это будет выглядеть в файле bat: % SubWCRev% "% ProjectDir%." "% ProjectDir% Properties \ AssemblyInfo.subwcrev-template.cs" "% ProjectDir% Properties \ AssemblyInfo.cs" – Grant

+0

Один вопрос: * «мы хотим сначала сравнить последнюю скомпилированную ревизию с текущей версией и только обновить, ve changed "* - где ваш скрипт выполняет эту проверку? – Groo

+0

@Groo Вы правы. когда я написал этот ответ, я отредактировал свой сценарий для исключения личных частей. Некоторые из них не прошли. Я отредактировал ответ. –

1

Вы можете использовать что-то подобное, чтобы получить номер версии 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 Version in .NET Assembly w/ out CC.NET

1

Я бы глядя в MSBuild Extension Pack.

Существует расширение Subversion, которое автоматически загрузит материал SVN. Ссылка здесь: MSBuild Subversion Extension Help

Во-вторых, вы можете использовать это с другими расширениями, чтобы программно установить версию каталога. В зависимости от вашего макета в вашей системе SCM вы можете иметь возможность выпускать каждую директорию в своем собственном репозитории.

+0

. Ваши 2 ссылки ссылаются на один и тот же URL-адрес (MSBuild Subversion Extension Help) – krlzlx

+0

первое лицо, которое забирает это через 3 года ...Я, честно говоря, даже не знаю ссылку, к которой я пытался обратиться ... – Spence

0

Проверьте пробелы и кавычки в файле проекта C#.

<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> 
Смежные вопросы