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

Visual studio 2010 针对项目上下文的VS 2010解决方案配置构建,visual-studio-2010,msbuild,Visual Studio 2010,Msbuild,我有一个包含30多个项目的VisualStudio解决方案。有两种构建配置,调试和发布。其中十个项目文件(.csproj)是使用外部工具合理频繁地生成的,该生成的模板包括调试和发布配置。修改模板以包含其他配置实际上不是一个选项 所以我遇到的问题是,我有一个新项目托管在AppFabric/IIS中。我正在使用Web.Config转换来更新Web.Config,以便部署到4个不同的环境:开发、测试、登台和生产。我已经使用Configuration Manager将这些上下文添加到特定项目中。这样我就

我有一个包含30多个项目的VisualStudio解决方案。有两种构建配置,调试和发布。其中十个项目文件(.csproj)是使用外部工具合理频繁地生成的,该生成的模板包括调试和发布配置。修改模板以包含其他配置实际上不是一个选项

所以我遇到的问题是,我有一个新项目托管在AppFabric/IIS中。我正在使用Web.Config转换来更新Web.Config,以便部署到4个不同的环境:开发、测试、登台和生产。我已经使用Configuration Manager将这些上下文添加到特定项目中。这样我就可以更新配置管理器,例如发布版本,以使用项目的生产上下文。右键单击并构建项目的部署包会导致对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>


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

我为每个环境添加了新的解决方案配置(不添加新的项目配置),然后使用Configuration Manager为相关项目设置要发布的上下文。不幸的是,这不起作用,因为MSBuild任务是针对项目文件而不是解决方案生成的。解决使用。添加新的解决方案配置是正确的方法,但链接的答案为我关闭了循环。生成脚本已更新为以下内容:

  <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)
该脚本根据解决方案文件生成,并为每个目标环境生成正确的包。出于示例脚本的目的,我正在MSBuildProjectDirectory中创建包,这有点不理想