Получение номера версии рабочей копии SVN в VersionInfo.cs
-
13-11-2019 - |
Вопрос
Все наши проекты в нашем 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
- Написать шаблон версийInfo.cs в репозиторий вместо окончательного файла, там изменяемая часть данных, замененная на (уместно) subwcrev-ключевое слово
- на каждом запуска процесса сборки.
Скачать Задача сообщества 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
.