我通过Visual Studio创建了一个名为Test的配置,它目前只接受所有DEBUG设置,但是如果构建恰好是TEST | DEBUG | RELEASE,我会使用编译器条件来确定一些特定的操作。
但是,如何让我的MSBUILD脚本检测到TEST配置?
目前我正在构建
<MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=$(Configuration);OutDir=$(BuildDir)\Builds\" />
@(SolutionsToBuild)是我的解决方案。在Common MsBuild Project Properties中,它声明$(配置)是一个公共属性,但它总是显示为空白?
这是否意味着它永远不会被设置,但只是保留供我使用或它只能检测DEBUG | RELEASE。如果是这样,允许创建不同的构建配置有什么意义?
答案 0 :(得分:42)
我在定义MSBUILD配置文件方面做得不多,但我使用像这样的批处理文件完成了不同配置的构建
msbuild /v:n /p:Configuration=Release "Capture.sln"
msbuild /v:n /p:Configuration=ReleaseNoUploads "Capture.sln"
我在Visual Studio中定义了 ReleaseNoUploads 配置。
以下是我必须做的事情(这是Visual Studio 2005):
答案 1 :(得分:5)
当然,您可以拥有任意数量的自定义构建配置。有关设置的外观,请参阅此相关问题。
How to conditionally deploy an app.config based on build configuration?
答案 2 :(得分:2)
请注意,当“在visual studio中”时,$(配置)和$(平台)始终由VS使用顶部下拉列表中的Configuration Manager内容设置。如果要从命令行使用msbuild设置这些值,则必须显式传入值(如@MarkBiek的答案)。
(大多数VS项目模板将'默认为'Configuration / Platform的值,因此您可以使用命令行MSBuild而无需显式指定这些值。这很好,但是这两个有用/常用属性显示为比他们实际上更加神奇/奇怪。)
答案 3 :(得分:2)
通常,我从单个MSBuild脚本构建Release和Debug所做的是:
<PropertyGroup Condition="'$(Configuration)'==''">
<Configuration>Debug;Release</Configuration>
</PropertyGroup>
然后添加这个MSBuild秘密酱:
<Target Name="configurations">
<CreateItem Include="$(Configuration)">
<Output TaskParameter="Include" ItemName="Configuration" />
</CreateItem>
</Target>
然后为每个目标执行以下操作:
<Target Name="Compile" DependsOnTargets="configurations" Inputs="@(Configuration)" Outputs="target\%(Configuration.FileName)">
<MSBuild Projects="@(MyProjects)" Targets="Build" Properties="Configuration=%(Configuration.Identity);WarningLevel=1" />
</Target>