Създавам пакети от пакетен файл, използвайки команди като:
msbuild ..\lib\Package.dproj /target:Build /p:config=%1
Настройките на пакетите зависят от набор от опции:
<Import Project="..\optionsets\COND_Defined.optset" Condition="'$(Base)'!='' And Exists('..\optionsets\COND_Defined.optset')"/>
Този набор от опции дефинира условен символ, от който зависят много от моите пакети. Файлът изглежда така:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DCC_Define>CONDITION;$(DCC_Define)</DCC_Define>
</PropertyGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>OptionSet</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality/>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
</Project>
Сега имам нужда от две компилации: една с дефинирано условие и една без. Моят вектор за атака ще бъде файлът с набор от опции. Имам няколко идеи какво да направя:
- напишете програма, която модифицира файла с набор от опции, стартирайте това преди пакетно изграждане
- поиграйте с файловете на проекта и променете пътя на набора от опции, за да съдържа променлива на средата, след което разполагайте с различни набори от опции на различни места
Но преди да започнем да преоткриваме колелото, бих искал да попитам как бихте се справили с тази задача? Може би вече има средства, предназначени да поддържат такъв случай (като определени превключватели на командния ред, неща, които мога да конфигурирам в Delphi или магия на партиден файл).