Вопрос

Все наши проекты в нашем SLN имеют общий файл VersionInfo.cs, в котором хранится номер версии проекта.

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

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

Шаг номер один — определить событие перед сборкой в ​​VS, которое запускает сценарий cmd. Есть ли простой способ получить версию рабочей копии из cmd?

Шаг номер два — вставить это число в файл VersionInfo.cs.

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

Это было полезно?

Решение 3

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

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

Другие советы

Есть ли простой способ получить версию рабочей копии из 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

РЕДАКТИРОВАТЬ:

Обновлен пакетный файл для работы с номерами версий формата. 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
    .
  • Если это VisualStudio, это Windows
  • Если это окна, вы можете использовать подкрутку из TortoiseSVN

    1. Написать шаблон версийInfo.cs в репозиторий вместо окончательного файла, там изменяемая часть данных, замененная на (уместно) subwcrev-ключевое слово
    2. на каждом запуска процесса сборки.

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

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

Вставьте следующий код (не меняйте <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>

Посмотрите на атрибут Путь к инструменту внутри тега 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.

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

$Rev$:     Revision of last commit
$Author$:  Author of last commit
$Date$:    Date of last commit
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top