针对项目上下文的VS 2010解决方案配置构建

3
我有一个 Visual Studio 解决方案,其中包含 30 多个项目。有 2 个构建配置,分别是 Debug 和 Release。其中的十个项目文件(.csproj)会经常使用外部工具生成,用于生成的模板包括 Debug 和 Release 配置。修改这些模板以包括其他配置不太可行。
所以我面临的问题是,我有一个托管在 AppFabric/IIS 上的新项目。我使用 Web.Config 转换来更新 Web.Config,以便部署到 4 个不同的环境:Development、Test、Staging 和 Production。我已将这些上下文添加到特定项目中,使用 Configuration Manager。这样就可以更新 Configuration Manager,例如针对 Release 构建,使用 Production 上下文来管理该项目。右键单击并为该项目构建部署包,将应用适当的转换到 Web.Config 中。
现在我想自动化该过程,因此编写了一个 MSBuild 脚本:
<ItemGroup>
    <BuildMode Include="Dev"/>
    <BuildMode Include="Test"/>
    <BuildMode Include="Staging"/>
    <BuildMode Include="Prod"/>
</ItemGroup>

<Target Name="Build" DependsOnTargets="Package"></Target>

<!--
  Build deployment package for each target environment
-->
<Target Name="Package" Outputs="%(BuildMode.Identity)">
    <Message Text="Building %(BuildMode.Identity)"/>
    <MSBuild Projects="..\SynchWorkflow\SynchWorkflow.csproj"
        Targets="Package"
        Properties="Platform=AnyCPU;Configuration=%(BuildMode.Identity);"/>
</Target>

不幸的是,这个错误出现是因为它试图构建一个在SynchWorkflow项目中不存在的Prod配置。我想要做的是使用Release配置生成Prod上下文包。是否可以使用MSBuild任务完成?在Properties属性中提供额外的设置能否实现这一点?

1个回答

3
我为每个环境添加了新的解决方案配置(而不是添加新的项目配置),然后使用配置管理器将依赖项目的上下文设置为Release。但不幸的是,这并没有起作用,因为MSBuild任务是针对项目文件而不是解决方案进行构建的。通过使用Julien Hoarau的SO回答得到解决。添加新的解决方案配置是正确的方法,但链接的答案为我解决了问题。构建脚本已更新为以下内容:
  <ItemGroup>
    <BuildMode Include="Development"/>
    <BuildMode Include="Test"/>
    <BuildMode Include="Staging"/>
    <BuildMode Include="Production"/>
  </ItemGroup>
  <PropertyGroup>
    <PackageLocation>$(MSBuildProjectDirectory)</PackageLocation>
  </PropertyGroup>

  <Target Name="Build" DependsOnTargets="Package"></Target>

  <!--
    Build deployment package for each target environment
  -->
  <Target Name="Package" Outputs="%(BuildMode.Identity)">
    <Message Text="Building %(BuildMode.Identity)"/>

    <MSBuild Projects="..\SynchWorkflow.sln"
       Properties="Platform=Any CPU;
                   Configuration=%(BuildMode.Identity);
                   DeployOnBuild=true;
                   DeployTarget=Package;
                   PackageLocation=$(PackageLocation)\SynchWorkflow.%(BuildMode.Identity)Package.zip;"/>
  </Target>

该脚本针对解决方案文件进行构建,并为每个目标环境生成正确的软件包。在本例脚本中,我将在MSBuildProjectDirectory中创建软件包,这有点不太理想。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接