-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDirectory.Build.targets
More file actions
68 lines (61 loc) · 3.68 KB
/
Copy pathDirectory.Build.targets
File metadata and controls
68 lines (61 loc) · 3.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<Project>
<!-- Таргет для сборки метаданных из Git.
Выполняется как для Debug, так и для Release, но только во время РЕАЛЬНОЙ сборки (не фоновой в редакторе) -->
<Target Name="SetGitVersionInfo"
BeforeTargets="PrepareForBuild;GetAssemblyVersion;GenerateAssemblyInfo"
Condition="Exists('$(MSBuildThisFileDirectory).git') And '$(DesignTimeBuild)' != 'true'">
<!-- Получаем количество коммитов (номер сборки) -->
<Exec Command="git rev-list --count HEAD"
WorkingDirectory="$(MSBuildThisFileDirectory)"
ConsoleToMSBuild="true"
StandardOutputImportance="low"
IgnoreExitCode="true"
ContinueOnError="true">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommitCount" />
<Output TaskParameter="ExitCode" PropertyName="GitExitCode" />
</Exec>
<!-- Получаем короткий SHA-хэш последнего коммита -->
<Exec Command="git rev-parse --short=7 HEAD"
WorkingDirectory="$(MSBuildThisFileDirectory)"
ConsoleToMSBuild="true"
StandardOutputImportance="low"
IgnoreExitCode="true"
ContinueOnError="true">
<Output TaskParameter="ConsoleOutput" PropertyName="GitShortHash" />
</Exec>
<!-- Обработка резервных значений в случае сбоя Git -->
<PropertyGroup Condition="'$(GitExitCode)' != '0' OR '$(GitCommitCount)' == ''">
<GitCommitCount>0</GitCommitCount>
<GitShortHash>local</GitShortHash>
</PropertyGroup>
<!-- Очистка пробелов -->
<PropertyGroup>
<GitCommitCount>$(GitCommitCount.Trim())</GitCommitCount>
<GitShortHash>$(GitShortHash.Trim())</GitShortHash>
</PropertyGroup>
<!-- Запись вычисленных версий в свойства сборки -->
<PropertyGroup>
<Version>$(VersionMajor).$(VersionMinor).$(GitCommitCount)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(Version)-$(VersionSuffix)</Version>
<AssemblyVersion>$(VersionMajor).$(VersionMinor).$(GitCommitCount).0</AssemblyVersion>
<FileVersion>$(VersionMajor).$(VersionMinor).$(GitCommitCount).0</FileVersion>
<InformationalVersion>$(VersionMajor).$(VersionMinor).$(GitCommitCount)+$(GitShortHash)</InformationalVersion>
</PropertyGroup>
<Message Importance="High" Text="══════════════════════════════════════" />
<Message Importance="High"
Text="[Git] Build #$(GitCommitCount) ($(GitShortHash)) успешно внедрен в сборку" />
<Message Importance="High" Text="══════════════════════════════════════" />
</Target>
<!-- Резервный таргет: срабатывает, если нет Git репозитория или идет фоновая (Design-Time) сборка в редакторе. -->
<Target Name="SetFallbackVersion"
BeforeTargets="PrepareForBuild;GetAssemblyVersion;GenerateAssemblyInfo"
Condition="!Exists('$(MSBuildThisFileDirectory).git') Or '$(DesignTimeBuild)' == 'true'">
<PropertyGroup>
<Version>$(VersionMajor).$(VersionMinor).0</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(Version)-$(VersionSuffix)</Version>
<AssemblyVersion>$(VersionMajor).$(VersionMinor).0.0</AssemblyVersion>
<FileVersion>$(VersionMajor).$(VersionMinor).0.0</FileVersion>
<InformationalVersion>$(VersionMajor).$(VersionMinor).0+local</InformationalVersion>
</PropertyGroup>
</Target>
</Project>