我使用以下命令从批处理文件构建包: msbuild ..\lib\Package.dproj /target:Build /p:config=%1 包的设置取决于选项集: Import Project="..\optionsets\COND_Defined.optset" Condition="'$(Base)'!='' And Exists('..\options
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中配置的东西或批处理文件魔法).
我这样做的方法是定义多个构建配置,然后在构建时使用/ p:config = XXX选择合适的构建配置.在IDE中也能很好地工作,因为你可以在项目管理器中双击构建配置来激活它.我个人使用构建配置的继承,这样我就不必重复自己了.例如,我有一个名为Debug DCU的构建配置,它继承自Debug配置,只是将Debug DCU选项更改为True.
为了帮助解释我的意思,这是构建配置树在我的项目中的样子:
调试DCU配置通过此选项集实现:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <DCC_DebugDCUs>true</DCC_DebugDCUs> </PropertyGroup> <ProjectExtensions> <Borland.Personality>Delphi.Personality.12</Borland.Personality> <Borland.ProjectType>OptionSet</Borland.ProjectType> <BorlandProject> <Delphi.Personality/> </BorlandProject> <ProjectFileVersion>12</ProjectFileVersion> </ProjectExtensions> </Project>
现在,我确信您可以使用/ p:DCC_Define = XXX来完成此操作,但我认为使用构建配置更清晰,这样您就可以确定IDE获得的内容与您从IDE获得的内容相同命令行构建.
我不建议你的子弹点列表中的任何一种方法.这些方法对我来说非常脆弱.