【问题标题】:Does Msbuild recognise any build configurations other than DEBUG|RELEASEMsbuild 是否识别除 DEBUG|RELEASE 之外的任何构建配置
【发布时间】:2009-03-03 14:47:58
【问题描述】:

我通过 Visual Studio 创建了一个名为 Test 的配置,它目前只接受所有 DEBUG 设置,但是如果构建恰好是 TEST|DEBUG|RELEASE,我会使用编译器条件来确定一些特定操作。

但是如何让我的 MSBUILD 脚本检测 TEST 配置?

目前我正在构建

 <MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=$(Configuration);OutDir=$(BuildDir)\Builds\" />

@(SolutionsToBuild) 是我的解决方案。在Common MsBuild Project Properties 中,它声明 $(Configuration) 是一个公共属性,但它总是显示为空白?

这是否意味着它永远不会被设置,而只是保留给我使用,或者它只能检测 DEBUG|RELEASE。如果是这样,允许创建不同的构建配置有什么意义?

【问题讨论】:

    标签: visual-studio-2005 msbuild


    【解决方案1】:

    我在定义 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 管理器菜单
    • 在弹出的对话框中,点击Active solution configuration下拉菜单并点击创建一个新的构建配置。

    【讨论】:

    • 唯一需要记住的是,您还需要设置项目构建配置以及解决方案
    • 这是什么意思?
    【解决方案2】:

    当然,您可以根据需要定义任意数量的自定义构建配置。有关设置的外观,请参阅此相关问题。

    How to conditionally deploy an app.config based on build configuration?

    【讨论】:

      【解决方案3】:

      请注意,当“在 Visual Studio 内部”时,$(Configuration) 和 $(Platform) 始终由 VS 使用顶部下拉列表中的配置管理器内容进行设置。然而,如果您想从命令行使用 msbuild 设置这些值,则必须显式传入这些值(如@MarkBiek 的回答)。

      (大多数 VS 项目模板将为 Configuration/Platform 'default in' 一个值,因此您可以使用命令行 MSBuild 而无需明确指定这些值。这很好,但会使这两个有用/常见的属性显示为比实际情况更神奇/奇怪。)

      【讨论】:

        【解决方案4】:

        通常我要从单个 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-25
          • 2010-10-22
          • 2012-06-05
          • 1970-01-01
          • 1970-01-01
          • 2012-02-22
          相关资源
          最近更新 更多