Msbuild是否识别除DEBUG | RELEASE之外的任何构建配置

时间:2009-03-03 14:47:59

标签: visual-studio-2005 msbuild

我通过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。如果是这样,允许创建不同的构建配置有什么意义?

4 个答案:

答案 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):

  • 打开工具:选项菜单,转到项目和解决方案:常规选项,然后选中显示高级构建配置
  • 从那里,转到 Build:Configuration Manager菜单
  • 在弹出的对话框中,单击 Active solution configuration 下拉菜单,然后单击&lt; New ...&gt; 以创建新的构建配置。

答案 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>