рдХрд╛рдлреА рдмрд╛рд░, рдореБрдЭреЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдбреЗрд▓реНрдлреА рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдЖрдк рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ) рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ "рдкреЗрди" рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдЙрддреНрдкрд╛рджрди рд╕рдорд╛рдзрд╛рди рд╕реЗ рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рд╣рд░ рд╕реЗ рд╕реНрдХреНрд░рдм рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ "рдЗрд╕реЗ рдШреБрдЯрдиреЗ рдкрд░ рдХрд░рддреЗ рд╣реИрдВ" , рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрддреНрдкрд╛рдж рдмрд╣реБрдд рдЧрдВрднреАрд░ рдФрд░ рдмрд┐рдХреНрд░реА рдпреЛрдЧреНрдп рд╣реИрдВ ред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рд╕рдордп рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдпрд╛ рдЬрдм рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА dcc32
рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрдВрдкрд╛рдЗрд▓рд░ рд╢реБрд░реВ рдХрд░рддреЗ рдереЗ ред рдХреБрдЫ рдиреЗ рдЕрдкрдирд╛ "рдкреНрд░рдХрд╛рд╢рдХ" рднреА рдмрдирд╛ рд▓рд┐рдпрд╛ - рдбреЗрд▓реНрдлреА-рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рд╕рд░реНрд╡рд░ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдИрдбреАрдИ рдореЗрдВ рдЦреБрд▓рд╛), рдЗрд╕реЗ рдХрд┐рд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╡рд░реНрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реБрдП, рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЪреИрдВрдЬ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╣реАрдВ рдкрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ред
рдореИрдВ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рднреНрд░рдордг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ ред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ / рдЕрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреА рджрдХреНрд╖рддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдбреЗрд▓реНрдлреА рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓ рдПрдХ .dproj
рдлрд╝рд╛рдЗрд▓ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж рдореИрдВ рдбреЗрд▓реНрдлреА 10 рд░рд┐рдпреЛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдереЛрдбрд╝реЗ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдбреЗрд▓реНрдлреА рдХреЗ рд╕рднреА рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рдЬреЛ 2007 рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИ)ред рдпрд╣ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдЖрдИрдбреАрдИ (рдореЗрдиреВ Project - Options (Ctrl+Shift+F11)
) рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ "рдореВрд▓" рд▓реЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдпрд╣ Config
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, Platform
рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо, OutputDirectory
рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде, рдФрд░ ConditionalDefines
рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢) рд╣реИред рдмрд╛рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЕрдЧрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЦреБрдж рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣ рдПрдХ рд╣реА .dproj
рдлрд╝рд╛рдЗрд▓, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рд╛рде рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ MSBuild рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ(рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдбреЗрд▓реНрдлреАрдСрдЯреЛрдореЗрдЯреЗрдбрдмреНрдпреВрдЗрд▓реНрдб рдХрд╣реЗрдВ ):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{6880AD8E-6CB3-47B9-B8E3-7304CF6E9735}</ProjectGuid>
<ProjectVersion>18.1</ProjectVersion>
<FrameworkType>None</FrameworkType>
<MainSource>DelphiAutomatedBuild.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Console</AppType>
</PropertyGroup>
...
MSBuild рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛред рдореИрдВ MSBuild рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫреВрдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╛рдардХ рдХреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░реЗ ред рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ? рдпрд╣ рд╣рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдбреЗрд▓реНрдлреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ( рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ )
msbuild /t:build DelphiAutomatedBuild.dproj
MSBuild? Delphi, MSBuild , Delphi . , %WINDIR%\Microsoft.Net\Framework\v3.5
, .Net 4.0/4.5/4.6. Microsoft. MSBuild 4.0, ,
(hint: , () IDE тАФ Show in Explorer, тАФ ), :
...>msbuild /t:build DelphiAutomatedBuild.dproj
"msbuild"
, .
. , MSBuild- PATH
. :
set PATH=%WINDIR%\Microsoft.Net\Framework\v3.5;%PATH%
:
...>msbuild /t:build DelphiAutomatedBuild.dproj
Microsoft (R) Build Engine 12.0.21005.1
[Microsoft .NET Framework 4.0.30319.42000]
(C) (Microsoft Corporation). .
24.11.2018 0:12:14.
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" 1 ( build).
Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj : error MSB4057: "build".
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" ( build) .
.
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" ( build ) (1) ->
Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj : error MSB4057: "build".
: 0
: 1
: 00:00:00.04
, . ? build
?
.dproj
-, :
...
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
...
Delphi
c:\Program Files\Embarcadero\Studio\20.0\Bin\CodeGear.Delphi.Targets
, MSBuild-, Build
:
<Target Name="Build"...
.. BDS
($(VAR)
MSBuild (Property) VAR
, , ), Delphi, (-, Delphi, BDS
). $(BDS)
, .Targets
Delphi Build
.
:
set BDS=c:\Program Files\Embarcadero\Studio\20.0
...>msbuild /t:build DelphiAutomatedBuild.dproj
Microsoft (R) Build Engine 12.0.21005.1
[Microsoft .NET Framework 4.0.30319.42000]
(C) (Microsoft Corporation). .
24.11.2018 0:20:40.
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" 1 ( build).
CreateProjectDirectories:
".\Win32\Debug".
BuildVersionResource:
C:\Program Files\Embarcadero\Studio\20.0\bin\cgrc.exe -c65001 DelphiAutomatedBuild.vrc -foDelphiAutomatedBuild.res
CodeGear Resource Compiler/Binder
Version 1.2.2 Copyright (c) 2008-2012 Embarcadero Technologies Inc.
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
"DelphiAutomatedBuild.vrc" .
_PasCoreCompile:
C:\Program Files\Embarcadero\Studio\20.0\bin\dcc32.exe -$O- -$W+ --no-config -B -Q -TX.exe -AGenerics.Collections=System.Generics.Collections;Generics.Defaults=System.Generics.Defaults;WinTypes=Winapi.Windows;WinProcs=Winapi.Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE -DDEBUG -E.\Win32\Debug -I"c:\program files\embarcadero\studio\20.0\lib\Win32\debug";"c:\program files\embarcadero\studio\20.0\lib\Win32\release";C:\Users\USER\Documents\Embarcadero\Studio\20.0\Imports;"C:\Program Files\Embarcadero\Studio\20.0\Imports";"C:\Users\Public\Documents\RAD Studio\5.0\Dcp";"C:\Program Files\Embarcadero\Studio\20.0\include";C:\Users\USER\AppData\Local\Programs\TestInsight\Source -LE"C:\Users\Public\Documents\RAD Studio\5.0\Bpl" -LN"C:\Users\Public\Documents\RAD Studio\5.0\Dcp" -NU.\Win32\Debug -NSWinapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;System;Xml;Data;Datasnap;Web;Soap; -O"c:\program files\embarcadero\studio\20.0\lib\Win32\release";C:\Users\USER\Documents\Embarcadero\Studio\20.0\Imports;"C:\Program Files\Embarcadero\Studio\20.0\Imports";"C:\Users\Public\Documents\RAD Studio\5.0\Dcp";"C:\Program Files\Embarcadero\Studio\20.0\include";C:\Users\USER\AppData\Local\Programs\TestInsight\Source -R"c:\program files\embarcadero\studio\20.0\lib\Win32\release";C:\Users\USER\Documents\Embarcadero\Studio\20.0\Imports;"C:\Program Files\Embarcadero\Studio\20.0\Imports";"C:\Users\Public\Documents\RAD Studio\5.0\Dcp";"C:\Program Files\Embarcadero\Studio\20.0\include";C:\Users\USER\AppData\Local\Programs\TestInsight\Source -U"c:\program files\embarcadero\studio\20.0\lib\Win32\debug";"c:\program files\embarcadero\studio\20.0\lib\Win32\release";C:\Users\USER\Documents\Embarcadero\Studio\20.0\Imports;"C:\Program Files\Embarcadero\Studio\20.0\Imports";"C:\Users\Public\Documents\RAD Studio\5.0\Dcp";"C:\Program Files\Embarcadero\Studio\20.0\include";C:\Users\USER\AppData\Local\Programs\TestInsight\Source -CC -V -VN -NB"C:\Users\Public\Documents\RAD Studio\5.0\Dcp" -NH"C:\Users\Public\Documents\RAD Studio\5.0\hpp\Win32" -NO.\Win32\Debug DelphiAutomatedBuild.dpr
Embarcadero Delphi for Win32 compiler version 30.0
Copyright (c) 1983,2015 Embarcadero Technologies, Inc.
19 lines, 0.27 seconds, 100748 bytes code, 26044 bytes data.
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" ( build).
.
: 0
: 0
: 00:00:01.32
-! . Win32\Debug
DelphiAutomatedBuild.exe
.
( , Debug-), Release- ( ). IDE , , , , . .dproj
-,
...
<Config Condition="'$(Config)'==''">Debug</Config>
...
, , / Config
, , Debug
. , IDE ( IDE Release тАФ
...
<Config Condition="'$(Config)'==''">Release</Config>
...
:
{$IFDEF RELEASE}
WriteLn('This is RELEASE build');
{$ENDIF RELEASE}
{$IFDEF DEBUG}
WriteLn('This is DEBUG build');
{$ENDIF DEBUG}
, conditional defines Release Debug- RELEASE DEBUG,
Config
, :
...>msbuild /t:build DelphiAutomatedBuild.dproj /p:Config=Release
Microsoft (R) Build Engine 12.0.21005.1
[Microsoft .NET Framework 4.0.30319.42000]
(C) (Microsoft Corporation). .
24.11.2018 0:48:30.
"Z:\habr\delphi-automate-build\DelphiAutomatedBuild.dproj" 1 ( build).
CreateProjectDirectories:
".\Win32\Release".
...
...>Win32\Debug\DelphiAutomatedBuild.exe
This is DEBUG build
...>Win32\Release\DelphiAutomatedBuild.exe
This is RELEASE build
!
( ) - , , , тАФ - . , . .dproj
:
...
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
...
? ( ), , ?
...>msbuild /t:build DelphiAutomatedBuild.dproj /p:DCC_ExeOutput=binaries
-! binaries
, тАФ DelphiAutomatedBuild.exe
. ? , MSBuild
, , , MSBuild
-, , . . ...
. , (, ). , Config
тАФ Debug
, тАФ тАФ Release
, , -, (, DCC_ExeOutput
( тАФ )), -, , ( , MSBuild- ).
...>msbuild /t:build DelphiAutomatedBuild.dproj /p:DCC_ExeOutput=binaries
. ? !
Build
. - , IDE ( ; , MMX: DProjNormalizer, DProjSplitter тАФ ProjectMagician тАФ .dproj
-), . DAB.ciproj (CI-project, CI тАФ Continuous Integration):
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="DelphiAutomatedBuild.dproj"
Targets="Build"
Properties="Config=Debug"/>
<MSBuild Projects="DelphiAutomatedBuild.dproj"
Targets="Build"
Properties="Config=Release"/>
</Target>
</Project>
...>msbuild /t:build DAB.ciproj /p:DCC_ExeOutput=binaries
тАж DelphiAutomatedBuild.exe
binaries
, , :
...>binaries\DelphiAutomatedBuild.exe
This is RELEASE build
DCC_Exeoutput
MSBuild тАФ , . :
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="DelphiAutomatedBuild.dproj"
Targets="Build"
Properties="Config=Debug;DCC_Exeoutput=$(DCC_ExeOutput)\Debug"/>
<MSBuild Projects="DelphiAutomatedBuild.dproj"
Targets="Build"
Properties="Config=Release;DCC_Exeoutput=$(DCC_ExeOutput)\Release"/>
</Target>
</Project>
...>msbuild /t:build DAB.ciproj /p:DCC_ExeOutput=binaries
binaries\Debug\DelphiAutomatedBuild.exe
binaries\Release\DelphiAutomatedBuild.exe
.
...>binaries\Debug\DelphiAutomatedBuild.exe
This is DEBUG build
...>binaries\Release\DelphiAutomatedBuild.exe
This is RELEASE build
, / conditional define (, -, , TRIAL )
-
{$IFDEF TRIAL}
WriteLn('This is TRIAL version');
{$ENDIF TRIAL}
Debug- conditional define TRIAL , .dproj:
<DCC_Define>DEBUG;TRIAL;$(DCC_Define)</DCC_Define>
, .. /p:DCC_Define=TRIAL,
...>msbuild /t:build DAB.ciproj /p:DCC_ExeOutput=binaries /p:DCC_Define=TRIAL
...>binaries\Debug\DelphiAutomatedBuild.exe
This is TRIAL version
...>binaries\Release\DelphiAutomatedBuild.exe
This is TRIAL version
, - , - DEBUG RELEASE, , .. define-.
, , . .
DCC_Define
:
...>set DCC_Define=TRIAL
...>msbuild /t:build DAB.ciproj /p:DCC_ExeOutput=binaries
...
...>binaries\Debug\DelphiAutomatedBuild.exe
This is DEBUG build
This is TRIAL version
...>binaries\Release\DelphiAutomatedBuild.exe
This is RELEASE build
This is TRIAL version
, , ( Git, SVN ) , , , , .
, . ? , , тАФ - "-", , ( " " тАФ ).
Windows/Delphi- Major.Minor.Release.Build
, , , Release
, , , . , , .dproj-
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
, . FileVersion=0.0.0.0
, , FileVersion=$(Version)
, Version
тАФ , , , IDE тАФ , .. "" . . , , тАФ CSV-, .
, . MSBuild 4.0 C#, ( , PATH ).
Delphi.Version.Targets<Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' ToolsVersion="12.0">
<UsingTask TaskName="__SetFileVersion" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll">
<ParameterGroup>
<VerInfoKeys ParameterType="System.String" Required="true" />
<VerInfoProperties ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<Out ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs"><![CDATA[
// split values as CSV (by ";")
String[] verInfoKeysList = VerInfoKeys.Split(';');
Dictionary<String, String> d = new Dictionary<String, String>();
foreach (String verInfoValue in verInfoKeysList) {
// split values as "key=value"
if (! String.IsNullOrEmpty(verInfoValue)) {
String[] kv = verInfoValue.Split('=');
d.Add(kv[0], kv[1]);
}
}
if (VerInfoProperties.Length > 0) {
foreach (ITaskItem item in VerInfoProperties) {
String value = item.GetMetadata("Value");
if (value.Length > 0) {
Log.LogMessage("{0}: {1}", item.ItemSpec, value);
d.Remove(item.ItemSpec);
d.Add(item.ItemSpec, value);
}
}
}
List<String> L = new List<String>();
foreach (KeyValuePair<String, String> kv in d) {
L.Add(kv.Key + "=" + kv.Value);
}
_Out = String.Join(";", L.ToArray());
]]></Code>
</Task>
</UsingTask>
<Target Name='_SetVersionCode_Name'>
<Message Text="$(VerInfo_Keys)" />
<ItemGroup>
<VerInfoProperties Include="FileVersion">
<Value>$(FileVersion)</Value>
</VerInfoProperties>
</ItemGroup>
<__SetFileVersion VerInfoKeys="$(VerInfo_Keys)" VerInfoProperties="@(VerInfoProperties)">
<Output PropertyName="VerInfo_Keys" TaskParameter="Out" />
</__SetFileVersion>
<Message Text="$(VerInfo_Keys)" />
</Target>
<Target Name='_SetFileVersion' BeforeTargets="_BuildRCFile"
Condition="'$(FileVersion)' != ''">
<CallTarget Targets='_SetVersionCode_Name'/>
</Target>
</Project>
.
DelphiAutomatedBuild.dproj
...
<Import Project="Delphi.Version.Targets" Condition="$(MSBuildToolsVersion) >= 4.0" />
...
( "$(MSBuildToolsVersion) >= 4.0" , IDE, , , MSBuild 3.5, UsingTask)
, _SetFileVersion
, _BuildRCFile
( : , тАФ . $(BDS)\bin\Codegear.Common.Targets
), FileVersion
. CSV- VerInfo_Keys
, -, , VerInfo_Keys
.
"Include version information in project" ( ), :
...>msbuild /t:build DAB.ciproj /p:DCC_ExeOutput=binaries /p:FileVersion=4.3.2.1
...>binaries\Debug\DelphiAutomatedBuild.exe
This is RELEASE build
This is TRIAL version
This file version is 4.3.2.1
...>binaries\Release\DelphiAutomatedBuild.exe
This is DEBUG build
This is TRIAL version
This file version is 4.3.2.1
Profit!
Delphi- , , , , , , . , ( ), .
- ( FixInsight, !)
- unit- Delphi (, ))). )
- "" Delphi- GitLab CI
- рдбреЗрд▓реНрдлреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ / рдХреНрд░реИрд╢ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдЯреЛ-рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреАрдбреАрдмреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░реЗрдВ)
Z.Y. рдореБрдЭреЗ рдкреАрдПрдо рдФрд░ @Delphi_Lazarus рдФрд░ @DelphiCommunity рдЪреИрдЯ рдореЗрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА