Получение номера редакции рабочей копии SVN в VersionInfo.cs - PullRequest
2 голосов
/ 27 февраля 2012

Все наши проекты в нашем SLN совместно используют VersionInfo.cs, который содержит номер версии проекта

[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]

Я хочу статически определить 3 первые части номера версии и последнюю часть, которой я хочу бытьверсия SVN рабочей копии.

Шаг первый - определить событие предварительной сборки в VS, которое запускает сценарий cmd. Существует ли простой способ получения редакции рабочей копии из cmd?

Второй шаг - вставить это число в файл VersionInfo.cs

Вероятно, есть более элегантные способы сделать это, если у вас есть такой в ​​магазине, просто помните, что это проект с открытым исходным кодом, и мы делаемне иметь причудливый сервер сборки или что-то в этом роде.Процедура развертывания просто переводит проект в режим релиза и строит: D

Ответы [ 5 ]

2 голосов
/ 27 февраля 2012

Есть ли простой способ получить ревизию рабочей копии из cmd?

Существует исполняемый файл с именем svnversion.exe, который печатает на стандартном выходе ревизию. Если вы уверены, что это в вашем PATH, вы могли бы позвонить.

Чтобы вставить это число в файл VersionInfo.cs

Вы можете сгенерировать файл VesionInfo.cs полностью или частично из командного файла:

@echo off

FOR /F %%A in ('svnversion') do SET SVN_REV=%%A

echo [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
echo [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs

EDIT:

Обновлен пакетный файл для работы с номерами ревизий в формате RR, NN:RR и NN:RRM, где NN - целое число, а RR - ревизия:

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion') do SET PART_1=%%A&SET PART_2=%%B

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

ECHO [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
ECHO [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs
1 голос
/ 26 ноября 2013

Скачать Задача сообщества MSBuild и установить ее.

Откройте ваш .csproj и в конце (до закрытия </project> tag)

Вставьте следующий код (не изменяйте тег <Import>):

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

После тега <Import> вставьте следующее:

  <Target Name="BeforeBuild">
      <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\TortoiseSVN\bin">
          <Output TaskParameter="Revision" PropertyName="Revision" />
      </SvnVersion>
      <FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" />
  </Target>

Посмотрите на атрибут ToolPath внутри тега SvnVersion вы должны указать, где на вашем компьютере находится двоичный файл svnversion.exe .

При условии, что у вас установлено программное обеспечение TortoiseSVN, путь к нему: C:\ProgramFiles\TortoiseSVN\bin\ Вы также можете использовать двоичные файлы VisualSVN (в этом случае двоичный файл находится по адресу C:\ProgramFiles\VisualSVN\bin\)

С этой модификацией в вашем .csproj в каждом проекте сборки MSBuild сначала будет вызыватьsvnversion.exe (с аргументом, текущим каталогом решения) и svnversion вернут номер ревизии для этого хранилища.В теге FileUpdate MSBuild будет искать шаблон регулярного выражения, а затем заменять его текущими значениями Major, Minor и Build ($ 1, $ 2 и $ 3 соответственно) и обновлять Revision со значением Revision переменной

.
1 голос
/ 28 февраля 2012

hmjd: s решение было только наполовину, если вы пишете в файл каждый раз, когда строите все проекты, ссылающиеся на Versionfile, необходимо перестроить, даже если ничего не изменилось, я изменил сценарий, чтобы записывать в файл только если егоновый номер редакции

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B

SET file=../VersionInfo.cs

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

set result=0

for /f "tokens=3" %%f in ('find /c /i ".%SVN_REV%." %file%') do set result=%%f

IF %result% gtr 0 (
GOTO end
)

ECHO using System.Reflection; > %file%
ECHO [assembly: AssemblyVersion("0.1.%SVN_REV%.0")]     >>  %file%
ECHO [assembly: AssemblyFileVersion("0.1.%SVN_REV%.0")] >> %file%

:end
1 голос
/ 28 февраля 2012
  • Если это VisualStudio, это Windows
  • Если это Windows, вы можете использовать SubWCRev из TortoiseSVN

    1. Записывать шаблон VersionInfo.cs в хранилище вместоВ конечном файле изменяемая часть данных заменяется (соответствующим) ключевым словом SubWCRev
    2. . При каждом процессе сборки запускается SubWCRev, который записывает конечный файл с фактическими данными из шаблона и данными WC (можно запустить или запустить полный построитель)./ просто как svn export + subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs)
0 голосов
/ 27 февраля 2012

Вы можете попробовать использовать Подстановки ключевых слов , чтобы заменить число при фиксации. У них есть это в качестве примера:

$Rev$:     Revision of last commit
$Author$:  Author of last commit
$Date$:    Date of last commit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...